spark-dataframe:使用2个布尔条件创建新列

时间:2016-10-06 16:01:57

标签: apache-spark pyspark apache-spark-sql pyspark-sql

我想基于2个布尔条件使用按位AND运算

来改变我的数据帧
df %>% mutate(newVariable = ifelse(variable1 == "value1" & variable2 == "value2, variable3, NULL)

所以在PySpark中测试了这个:

import pyspark.sql.functions as func

df.withColumn("newVariable", func.when( \
     func.col("variable1") == "value1" & func.col("variable2") == "value2", \
     func.col("variable3")))

但我有错误

使用spark数据帧创建这种新变量的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您必须记住运营商优先级。在Python中,&的优先级高于==,因此必须对个别的相等性检查进行括号括起来:

(func.col("variable1") == "value1") & (func.col("variable2") == "value2")

否则表达式评估为:

(func.col("variable1") == ("value1" & func.col("variable2"))) == "value2"