Azure Databricks Python基于现有内容的列添加派生列

问题描述 投票:0回答:1

我有一个加载在csv文件中的spark数据框。但是,我想在数据帧中添加两列,并且这些列的内容取决于已经准备就绪的一列的内容。

我已经准备好的列称为YearWeek,可以包含wkxxxx_yy或xxxx_yy,其中xxxx是年份。

我需要添加一个名为Period的列和一个名为Year的列新的列周期只能包含“每周”或“每月”值。如果列YearWeek以“ wk”开头,则期间列的值应为“ Weekly”,否则为“ Monthly”

我进行了一些搜索,发现了以下代码:

> df4 = df3.withcolumn(NewColumn5, when          
>     df3.col("YearWeek").startswith("wk"),yearweek[3:6].otherwise(YearWeek[1:4]))\
>     .withcolumn(NewColumn1, when df3.col("YearWeek").startswith("wk"),"Weekly".otherwise("Monthly"))

但是,这会导致语法错误

SyntaxError: invalid syntax
File "<command-2818966973632811>", line 61
df4 = df3.withcolumn(NewColumn5, when 
df3.col("YearWeek").startswith("wk"),yearweek[3:6].otherwise(YearWeek[1:4]))\
                                    ^
SyntaxError: invalid syntax

我在做什么错?

python azure conditional-statements databricks derived
1个回答
0
投票

同时,我以不同的方式解决了它。我只读取了csv文件,并将它们放在一个大数据框中。之后,我从数据框中制作表格

df4.createOrReplaceTempView(tablename)

我使用spark SQL根据YearWeek列的内容添加派生列。对我来说,实际上非常容易,因为我是SQL专家

df5 = spark.sql("select Somecolumn1,\
                    Somecolumn2,\
                     Somecolumn3,\
                     Somecolumn4,\
                     YearWeek,\
                     Somecolumn5,\
                     Somecolumn6,\
                     Somecolumn7,\
                     Somecolumn8,\
                     Somecolumn9,\
                     Somecolumn10,\
                     Somecolumn11,\
                     Somecolumn12,\
                     CASE WHEN LEFT(YearWeek,2) = 'WK' THEN 'Weekly' ELSE 'Monthly' END AS Period,\
                     CASE WHEN LEFT(YearWeek,2) = 'WK' THEN substring(YearWeek, 3,4) ELSE substring(YearWeek,1,4) END AS Year from " + tablename)
© www.soinside.com 2019 - 2024. All rights reserved.