我之前在这里看到过这个问题,我从中吸取了教训。但是我不知道为什么我会在我觉得应该有效的时候犯错误。
我想根据一些规则在现有的SparkDataFrame
中创建一个新列。这是我写的。iris_spark是一个具有三个不同类别的分类变量iris_spark的数据帧。
from pyspark.sql import functions as F
iris_spark_df = iris_spark.withColumn(
"Class",
F.when(iris_spark.iris_class == 'Iris-setosa', 0, F.when(iris_spark.iris_class == 'Iris-versicolor',1)).otherwise(2))
引发以下错误。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-157-21818c7dc060> in <module>()
----> 1 iris_spark_df=iris_spark.withColumn("Class",F.when(iris_spark.iris_class=='Iris-setosa',0,F.when(iris_spark.iris_class=='Iris-versicolor',1)))
TypeError: when() takes exactly 2 arguments (3 given)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-157-21818c7dc060> in <module>()
----> 1 iris_spark_df=iris_spark.withColumn("Class",F.when(iris_spark.iris_class=='Iris-setosa',0,F.when(iris_spark.iris_class=='Iris-versicolor',1)))
TypeError: when() takes exactly 2 arguments (3 given)
知道为什么吗?
正确的结构是:
相当于
或:
相当于:
一般语法:
或者
你可能把Hive
IF
条件的东西弄混了:它只能在支持配置单元的原始SQL中使用。
Spark中的条件语句
1。在DataFrame上使用“when otherwise”
用新的价值观取代性别的价值观
2。在DataFrame上使用“case when”
或者
3。使用&;和| |运算符
输出:
如果不是这样,你可以有不同的方法来实现。
在DataFrame API中使用when函数。 您可以在when中指定条件列表,也可以指定您需要的值。也可以在嵌套形式中使用此表达式。
expr函数。 使用“expr”函数可以在expr中传递SQL表达式。PFB示例。在这里,我们将基于月列创建新的列“季度”。
相关问题 更多 >
编程相关推荐