web-dev-qa-db-ja.com

pysparkデータフレームフィルターまたはリストに基づく組み込み

リストを使用して、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)

次のエラーが表示されます。ValueError:列をboolに変換できません:「and」、「|」に「&」を使用してくださいDataFrameブール式を作成する場合、「or」、「〜」は「not」を表します。

26
user3133475

「df.score in l」は評価できない

コードは次のようになります。

# 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)
46
user3133475