B_M*_*ner 1 apache-spark-sql pyspark
我在之前的查询中创建了一个名为 v1 的字段。然后我尝试从中创建一个新的派生字段。
一种方法有效,另一种则无效。我不明白,我希望它们是等价的。
这有效:
df = df.withColumn("outcome",expr("case when v1 = 0 then 1 when v1 > 0 then 2 else 0 end"))
Run Code Online (Sandbox Code Playgroud)
这失败了:
df = df.withColumn("outcome", F.when(F.col("v1") == 0, 1)
.F.when(F.col("v1") >0, 2)
.otherwise(0))
Run Code Online (Sandbox Code Playgroud)
有错误:
Py4JJavaError: An error occurred while calling o520.when.
: java.lang.IllegalArgumentException: when() can only be applied on a Column previously generated by when() function
Run Code Online (Sandbox Code Playgroud)
pis*_*all 12
您已经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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |