2017-03-28 13 views
0

私は4つの列からなるDataFrameを持っています。 A、B、C、Dとしましょう。列Bの値が 'NONE'または 'NOTHING'の行を除外します。私はUDFを使ってこれを行う方法を知っていますが、代わりにラムダの無名関数でこれを行う方法が不思議です。udfをpysparkのインラインラムダに変換する

マイ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() 

私はそれをラムダ道をやろうとしている、と私は、これは

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

を動作させることはできません私は何を間違えたのですか?

答えて

0

spark guideによる形式は次のとおりです。

次のフィルタ条件のいずれかを使用することができますあなたの場合は
df.filter(df['age'] > 21).show() 

:(filterの別名である)

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

where条件:

from pyspark.sql.functions import col 

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

または:

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

@user2773013 - 私の答えはあなたのために働いたのですか? – Yaron

関連する問題