2016-11-04 4 views
2

リストを使用してpysparkでデータフレームをフィルタリングしようとしています。私は、リストに基づいてフィルタリングするか、リストに値を持つレコードのみを含めたいと思います。以下の私のコードは動作しません: とValueError:pysparkデータフレームフィルタまたはリストに基づいてインクルードする

# define a dataframe 
rdd = sc.parallelize([(0,1), (0,1), (0,2), (1,2), (1,10), (1,20), (3,18), (3,18), (3,18)]) 
df = sqlContext.createDataFrame(rdd, ["id", "score"]) 

# define a list of scores 
l = [10,18,20] 

# filter out records by scores by list l 
records = df.filter(df.score in l) 
# expected: (0,1), (0,1), (0,2), (1,2) 

# include only records with these scores in list l 
records = df.where(df.score in l) 
# expected: (1,10), (1,20), (3,18), (3,18), (3,18) 

は、次のエラーを与えるブール値に列を変換できません:、「と」は「&」を使用してください「|」 DataFrameのブール式を構築するときは 'or'、 '〜'は 'not'です。それは言う

答えて

7

はdf.scoreが

「ISIN」というコラムタイプの使用に定義されていません「に」あなたに列を与えるとするので、「リットルでdf.scoreは、」評価できないでコードがなければなりませんこのように:

# define a dataframe 
rdd = sc.parallelize([(0,1), (0,1), (0,2), (1,2), (1,10), (1,20), (3,18), (3,18), (3,18)]) 
df = sqlContext.createDataFrame(rdd, ["id", "score"]) 

# define a list of scores 
l = [10,18,20] 

# filter out records by scores by list l 
records = df.filter(~df.score.isin(l)) 
# expected: (0,1), (0,1), (0,2), (1,2) 

# include only records with these scores in list l 
df.where(df.score.isin(l)) 
# expected: (1,10), (1,20), (3,18), (3,18), (3,18) 
関連する問題