在pyspark中将udf转换为内联lambda

时间:2017-03-28 14:15:32

标签: pyspark spark-dataframe

我有一个由4列组成的DataFrame。让我们说它是A,B,C和D.我想要排除B列值为'NONE'的行。或者没有'没有'。我知道如何使用UDF执行此操作,但我很好奇如何在lambda匿名函数中执行此操作。

我的DataFrame是df,我的udf如下:

from pyspark.sql.functions import udf
def B_field(B_field_value):
   if B_field_value == 'NONE' or B_field_value == 'NOTHING':
      return True
udf_B = udf(B_field, BooleanType())
print df.filter(udf_CT(df['B'])).count()

我试图以lambda的方式做到这一点,我无法让它工作

df.select(df['CT']).filter(lambda x: x == 'NONE' or x == ''NOTHING)

我做错了什么?

1 个答案:

答案 0 :(得分:0)

根据spark guide,格式为:

df.filter(df['age'] > 21).show()

在您的情况下,您可以使用以下过滤条件之一:

df.filter((df['CT'] != 'NOTHING') && df['CT'] != 'None'))

where条件(filter的别名):

from pyspark.sql.functions import col 

df.where(
    (col('CT') != 'NOTHING') &&
    (col('CT') != 'NONE'))

或:

df.filter(col("CT").notEqual("NOTHING") && col("CT").notEqual("NONE"))