如何在Spark

时间:2016-11-18 22:30:19

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

我想评估两种情况: -

import pyspark.sql.functions as F

df = df.withColumn(
    'trueVal', F.when(df.value < 1 OR df.value2  == 'false' , 0 ).otherwise(df.value)) 

为此,我使用'OR'

获得'无效语法'

即使我尝试使用嵌套的when语句: -

df = df.withColumn(
    'v', 
    F.when(df.value < 1,(F.when( df.value =1,0).otherwise(df.value))).otherwise(df.value)
) 

为此,我得到'keyword can't be an expression'嵌套的when语句。

我如何在when任何解决方法中使用多个条件?

1 个答案:

答案 0 :(得分:19)

pyspark.sql.DataFrame.where以布尔列为条件。使用PySpark时,在阅读“Column”时想到“Column Expression”通常很有用。

PySpark列上的逻辑操作使用bitwise operators

    {li> & and {li> | or {li> ~ not

将这些与比较运算符(例如<)组合时,通常需要使用括号。

在您的情况下,正确的陈述是:

import pyspark.sql.functions as F
df = df.withColumn('trueVal',
    F.when((df.value < 1) | (df.value2 == 'false'), 0).otherwise(df.value))

另请参阅:SPARK-8568