Pyspark:将具有不同键的rdd转换为spark dataframe

Pyspark: convert rdd with different keys to spark dataframe

我遇到的情况是我的 rdd 键在每个字典中都不同,有些键比其他键更多和不同。

因此我无法使用 toDF() 直接隐藏它们。有人有更好的主意吗?

list1 = [{'this':'bah', 'is': 'bah'}, 
         {'this': 'true', 'is': 'false'}, 
         {'this': 'true', 'is': 'false', 'testing':'bah'}]

rdd = sc.parallelize(list1)
rdd.map(lambda x: Row(**x)).toDF().show()

我想没有开箱即用的解决方案。

乍一看,我要做的是创建一个包含我集合中所有列的 set() 列表,然后遍历每一行以创建所有不存在的列并将它们初始化为 None:

list1 = [{'this':'bah', 'is': 'bah'}, 
         {'this': 'true', 'is': 'false'}, 
         {'this': 'true', 'is': 'false', 'testing':'bah'}]

# create a list of unique available keys   
keys = set().union(*(item.keys() for item in list1))

for key,item in enumerate(list1):
    # find which ones are not in the current row
    difference = [i for i in keys if i not in item]
    if len(difference) > 0:
        # create them
        for i in range(0,len(difference)):
            item[difference[i]] = None

然后您的集合具有相同的列数:

[{'this': 'bah', 'is': 'bah', 'testing': None}, {'this': 'true', 'is': 'false', 'testing': None}, {'this': 'true', 'is': 'false', 'testing': 'bah'}]