我有一个spark dataframe
,其中包含4列:
(col_1, col_2, col_3, col_4) ==> (String, String, Int, Int)
在数据中,有时col_3
为空,例如:
col_1|col_2|col_3|col_4
col_1|col_2||col_4
在测试第3列和第4列之后,我想返回仅包含3列的新dataframe
:
如果col_3
为空,则返回col_4
否则返回col_3
要解决这个问题,我做到了:
>>>
>>> def calculcolumn(col_3, col_4):
... if (col_3 is None ):
... return col_4
... else:
... return col_3
...
>>>
>>> calculcolumn( ,12)
File "<stdin>", line 1
calculcolumn( ,12)
^
SyntaxError: invalid syntax
>>>
但是它抛出了SyntaxError
,我该如何解决?
答案 0 :(得分:2)
您得到一个SyntaxError
,因为这是语法错误。
您还必须传递第一个参数。
def calculcolumn(col_3, col_4):
if (col_3 is None ):
return col_4
else:
return col_3
calculcolumn(None, 12)
您还可以使用 kwargs 并执行以下操作:
def calculcolumn(col_3=None, col_4=None):
if (col_3 is None ):
return col_4
else:
return col_3
calculcolumn(col_4=12)
答案 1 :(得分:0)
如果您使用的是pyspark
数据框,则应该使用本机的pyspark
函数。要解决您的问题,您可以执行以下操作根据col3
是否为None
创建新列:
df = df.withColumn('new_col', func.when(func.col("col3").isNull(), func.col("col4")).otherwise(func.col("col3"))
此函数将创建一个新列,如果col3
为null,将使用col4
,否则将使用col3
。