spark-dataframe:创建具有 2 个布尔条件的新列
spark-dataframe: Create new column with 2 boolean conditions
我想根据 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 dataframe 创建这种新变量的正确方法是什么?
你必须记住运算符的优先级。在 Python 中,&
比 ==
具有更高的优先级,因此必须用括号括起各个相等性检查:
(func.col("variable1") == "value1") & (func.col("variable2") == "value2")
否则表达式计算为:
(func.col("variable1") == ("value1" & func.col("variable2"))) == "value2"
我想根据 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 dataframe 创建这种新变量的正确方法是什么?
你必须记住运算符的优先级。在 Python 中,&
比 ==
具有更高的优先级,因此必须用括号括起各个相等性检查:
(func.col("variable1") == "value1") & (func.col("variable2") == "value2")
否则表达式计算为:
(func.col("variable1") == ("value1" & func.col("variable2"))) == "value2"