我有一个加载在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
我在做什么错?
同时,我以不同的方式解决了它。我只读取了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)