首页 > 解决方案 > 减少(键,值),其中值是 Spark 中的字典

问题描述

我是新来的火花,还在学习。我的问题是我正在使用一个map函数来创建一个形式为 (key, dict) 的 Rdd,它看起来像这样[(0, {‘f_0’:’-0.5’}), (0, {‘f_1’:’-0.67’}), (1, {‘f_0’:’-0.36’}), (1, {‘f_1’:’-1.5’})]

通过键减少的所需形式应该是: [(0, {’f_0’:’-0.5’,’f_1’:’-0.67’}), (1, {‘f_0’:’-0.36’, ‘f_1’:’-1.5’})]

pyspark在databricks上使用python

有人可以帮忙吗?

标签: pythonapache-sparkpysparkapache-spark-sqlmapreduce

解决方案


根据您的问题,您的地图功能输出是:

df = spark.createDataFrame([
  (0, {'f_0':-0.5}), 
  (0, {'f_1':-0.67}), 
  (1, {'f_0':-0.36}), 
  (1, {'f_1':-1.5})], ["key", "val"])

将以下代码与 reduceByKey 一起使用以获得所需的输出:

df.rdd.reduceByKey(lambda a,b:{**a,**b})

请注意,上面的代码将在 python3 版本而不是 python2 中工作。因此 pyspark python 版本应该是 3.5 或更高。

如果您的 pyspark python 版本是 2.7,则使用以下代码:

def merge_two_dicts(x, y):
    z = x.copy()   
    z.update(y)    

    return z

merge= df.rdd.reduceByKey(merge_two_dicts)

推荐阅读