【问题标题】:Reducing (Key, Value) where value is a dictionary in Spark减少(键,值),其中值是 Spark 中的字典
【发布时间】:2019-09-14 15:50:44
【问题描述】:

我是 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,python

有人可以帮忙吗?

【问题讨论】:

  • 您好,您解决了这个问题吗?

标签: python apache-spark pyspark apache-spark-sql mapreduce


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多