比较两列以在Spark DataFrame中创建新列

时间:2018-01-22 20:05:36

标签: python pyspark apache-spark-sql

我有一个包含2列的Spark DataFrame,我正在尝试使用其他两列创建一个新列,并使用when其他操作。

df_newcol = df.withColumn("Flag", when(col("a") <= lit(ratio1) | col("b") <= lit(ratio1), 1).otherwise(2))

但这会引发错误

ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

我曾经使用过什么时候以及以前使用过一列,而在使用多列时,我们必须以不同的方式编写逻辑。

感谢。

1 个答案:

答案 0 :(得分:2)

您有运算符优先级问题,请确保在比较与componentWillReceiveProps&之类的逻辑运算符混合时将比较运算符放在括号中,修正后,您不需要甚至需要|,标量也应该起作用:

lit

以下两项都应该有效:

import pyspark.sql.functions as F
df = spark.createDataFrame([[1, 2], [2, 3], [3, 4]], ['a', 'b'])