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]但是这种方法已经被弃用并且不是特别健壮。