Pyspark 将字典的 collectionRDD 向量化为单个 dataframeRDD?
Pyspark vectorize a collectionRDD of dictionaries into a single dataframeRDD?
所以我有一个由 OrderedDict 元素组成的 CollectionRDD。我想对它们执行 KMeans 聚类分析,但为此,我需要先将它们全部放入一个数据框中。有没有办法在pyspark中做到这一点?
例如,如果我有以下两个词典:
{"A":"1","B":"BEE","C":"123","Username":"john"}
{"B":"MN","C":"87","D":"Apple"}
我想要一个 dataframeRDD,如下所示:
A B C D Username
1 Bee 123 john
MN 87 Apple
我知道我可以在常规 python 中使用 for 循环迭代地执行此类操作,但我要处理大量数据,所以我想使用 pyspark执行这个操作
谢谢
如果您的数据是平坦的,如示例中所示,您可以做的最简单的事情就是映射到 Row
并调用 DF
.
from pyspark.sql import Row
keys = ('A', 'B', 'C', 'D', 'Username')
row = Row(*keys)
rdd = sc.parallelize([
OrderedDict([('A', '1'), ('B', 'BEE'), ('C', '123'), ('Username', 'john')]),
OrderedDict([('B', 'MN'), ('C', '87'), ('D', 'Apple')])
])
df = rdd.map(lambda xs: row(*(xs.get(k) for k in keys))).toDF()
df.show()
## +----+---+---+-----+--------+
## | A| B| C| D|Username|
## +----+---+---+-----+--------+
## | 1|BEE|123| null| john|
## |null| MN| 87|Apple| null|
## +----+---+---+-----+--------+
警告:
也可以直接转换为DF而无需中间RDD[Row]
但是这种方法已经被弃用并且不是特别健壮。
所以我有一个由 OrderedDict 元素组成的 CollectionRDD。我想对它们执行 KMeans 聚类分析,但为此,我需要先将它们全部放入一个数据框中。有没有办法在pyspark中做到这一点?
例如,如果我有以下两个词典:
{"A":"1","B":"BEE","C":"123","Username":"john"}
{"B":"MN","C":"87","D":"Apple"}
我想要一个 dataframeRDD,如下所示:
A B C D Username
1 Bee 123 john
MN 87 Apple
我知道我可以在常规 python 中使用 for 循环迭代地执行此类操作,但我要处理大量数据,所以我想使用 pyspark执行这个操作
谢谢
如果您的数据是平坦的,如示例中所示,您可以做的最简单的事情就是映射到 Row
并调用 DF
.
from pyspark.sql import Row
keys = ('A', 'B', 'C', 'D', 'Username')
row = Row(*keys)
rdd = sc.parallelize([
OrderedDict([('A', '1'), ('B', 'BEE'), ('C', '123'), ('Username', 'john')]),
OrderedDict([('B', 'MN'), ('C', '87'), ('D', 'Apple')])
])
df = rdd.map(lambda xs: row(*(xs.get(k) for k in keys))).toDF()
df.show()
## +----+---+---+-----+--------+
## | A| B| C| D|Username|
## +----+---+---+-----+--------+
## | 1|BEE|123| null| john|
## |null| MN| 87|Apple| null|
## +----+---+---+-----+--------+
警告:
也可以直接转换为DF而无需中间RDD[Row]
但是这种方法已经被弃用并且不是特别健壮。