在spark中使用map制作字典格式

Using map in spark to make dictionary format

我执行了以下代码:

temp = rdd.map( lambda p: ( p[0], (p[1],p[2],p[3],p[4],p[5]) ) ).groupByKey().mapValues(list).collect()
print(temp)

我可以获得数据:

[ ("A", [("a", 1, 2, 3, 4), ("b", 2, 3, 4, 5), ("c", 4, 5, 6, 7)]) ]

我正在尝试用第二个列表参数制作字典。 例如我想重建 temp 这样的格式:

("A", {"a": [1, 2, 3, 4], "b":[2, 3, 4, 5], "c":[4, 5, 6, 7]})

有什么明确的方法可以做到这一点吗?

获得 temp 对象后,使用自定义 Python 函数即可轻松实现。你只需要使用元组、列表和字典操作。

def my_format(l):
    
    # get tuple inside list 
    tup = l[0]
    
    # create dictionary with key equal to first value of each sub-tuple
    dct = {}
    for e in tup[1]:
        dct2 = {e[0]: list(e[1:])}
        dct.update(dct2)
    
    # combine first element of list with dictionary
    return (tup[0], dct)



my_format(temp)
# ('A', {'a': [1, 2, 3, 4], 'b': [2, 3, 4, 5], 'c': [4, 5, 6, 7]})

如果我理解正确的话,你需要这样的东西:

spark = SparkSession.builder.getOrCreate()
data = [
    ["A", "a", 1, 2, 5, 6],
    ["A", "b", 3, 4, 6, 9],
    ["A", "c", 7, 5, 6, 0],
]
rdd = spark.sparkContext.parallelize(data)
temp = (
    rdd.map(lambda x: (x[0], ({x[1]: [x[2], x[3], x[4], x[5]]})))
    .groupByKey()
    .mapValues(list)
    .mapValues(lambda x: {k: v for y in x for k, v in y.items()})
)
print(temp.collect())
# [('A', {'a': [1, 2, 5, 6], 'b': [3, 4, 6, 9], 'c': [7, 5, 6, 0]})]