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

Azure Databricks Python基于现有列的内容添加派生列,python,azure,conditional-statements,databricks,derived,Python,Azure,Conditional Statements,Databricks,Derived,我在spark中加载了一个来自csv文件的数据帧。但是,我想在数据框中添加两列,这些列的内容取决于其中一列的内容 我准备好的列名为YearWeek,可以包含wkxxxx_-yy或xxxx_-yy,其中xxxx是年份 我需要添加一个名为Period的列和一个名为Year的列 新列期间只能包含值“每周”或“每月”。如果列YearWeek以“wk”开头,则列周期的值应为“Weekly”,否则为“Monthly” 我做了一些非常规的搜索,得到了以下代码: > df4 = df3.withcolum

我在spark中加载了一个来自csv文件的数据帧。但是,我想在数据框中添加两列,这些列的内容取决于其中一列的内容

我准备好的列名为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
SyntaxError:无效语法
文件“”,第61行
df4=df3.withcolumn(当
df3.col(“YearWeek”).startswith(“wk”),YearWeek[3:6]。否则(YearWeek[1:4]))\
^
SyntaxError:无效语法

我做错了什么?

与此同时,我以不同的方式解决了这个问题。我只是读取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)