我在上一个查询中创建了一个名为v1的字段。然后,我尝试从中创建一个新的派生字段。
一种方法有效,另一种无效。我不明白,我希望他们是等效的。
这有效:
df = df.withColumn("outcome",expr("case when v1 = 0 then 1 when v1 > 0 then 2 else 0 end"))
这将失败:
df = df.withColumn("outcome", F.when(F.col("v1") == 0, 1)
.F.when(F.col("v1") >0, 2)
.otherwise(0))
错误:
Py4JJavaError: An error occurred while calling o520.when.
: java.lang.IllegalArgumentException: when() can only be applied on a Column previously generated by when() function
您是when
从pyspark.sql.functions
或调用的F
,您需要链接when
条件(例如F.when().when().when().otherwise()
),而无需F
再次调用它。
只需将代码更改为:
df = df.withColumn("outcome", F.when(F.col("v1") == 0, 1)
.when(F.col("v1") >0, 2)
.otherwise(0))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句