PySpark - 按列值拆分/过滤DataFrame

6
我有一个类似于以下示例的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的“列表”(在下一步中绘制一些图形)。例如:
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)实现吗?
2个回答

6

虽然不是最有效的方法,但你可以使用map和filter来对唯一值列表进行映射:

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

Spark 2.0发布

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

请注意,在Spark 2.0之后,正确的命令应该是: words = df.select("Word").distinct().rdd.flatMap(lambda x: x).collect() - Ganesh Krishnan

1
除了zero323所说的,我可能还要补充
word.persist()

在创建dfs之前,"words"数据框不需要每次进行转换,这样当您对每个"dfs"执行操作时就可以避免。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接