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" 数据框
我有一个类似于此示例的 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" 数据框