我有一个包含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.
我曾经使用过什么时候以及以前使用过一列,而在使用多列时,我们必须以不同的方式编写逻辑。
感谢。
答案 0 :(得分:2)
您有运算符优先级问题,请确保在比较与componentWillReceiveProps
和&
之类的逻辑运算符混合时将比较运算符放在括号中,修正后,您不需要甚至需要|
,标量也应该起作用:
lit
以下两项都应该有效:
import pyspark.sql.functions as F
df = spark.createDataFrame([[1, 2], [2, 3], [3, 4]], ['a', 'b'])