PySpark - Split/Filter DataFrame 按列的值

PySpark - Split/Filter DataFrame by column's values

我有一个类似于此示例的 DataFrame:

Timestamp | Word | Count

30/12/2015 | example_1 | 3

29/12/2015 | example_2 | 1

28/12/2015 | example_2 | 9

27/12/2015 | example_3 | 7

... | ... | ...

并且我想通过 'word' 列的值拆分此数据框以获得 DataFrame 的 "list" (在下一步中绘制一些数字)。例如:

DF1

Timestamp | Word | Count

30/12/2015 | example_1 | 3

DF2

Timestamp | Word | Count

29/12/2015 | example_2 | 1

28/12/2015 | example_2 | 9

DF3

Timestamp | Word | Count

27/12/2015 | example_3 | 7

有没有办法用 PySpark (1.6) 做到这一点?

效率不高,但您可以在唯一值列表上使用过滤器进行映射:

words = df.select("Word").distinct().flatMap(lambda x: x).collect()
dfs = [df.where(df["Word"] == word) for word in words]

Post 火花 2.0

words = df.select("Word").distinct().rdd.flatMap(lambda x: x).collect()

除了zero323说的,我还想补充

word.persist()

在创建 dfs 之前,因此当您对每个 "dfs"

执行操作时,不需要每次都转换 "words" 数据框