【问题标题】:ReduceByKey for a HashMap based RDDReduceByKey 用于基于 HashMap 的 RDD
【发布时间】:2017-07-27 20:34:58
【问题描述】:

我有一个元组 (key,HashMap[Int, Set(String)])RDD A,我想将其转换为一个新的 RDD B (key, HashMap[Int, Set(String)),其中后一个 RDD 具有唯一的键和每个键 k 的值是 RDD A 中键 k 的所有集合的 union

例如,

RDD A

(1,{1->Set(3,5)}), (2,{3->Set(5,6)}), (1,{1->Set(3,4), 7->Set(10, 11)})

将转换为

RDD B

(1, {1->Set(3,4,5), 7->Set(10,11)}), (2, {3->Set(5,6)})

我无法在 Scala 中为此制定函数,因为我是该语言的新手。任何帮助将不胜感激。

提前致谢。

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    cats Semigroup 非常适合这里。添加

    spark.jars.packages org.typelevel:cats_2.11:0.9.0
    

    配置并使用combine方法:

    import cats.implicits._
    
    val rdd = sc.parallelize(Seq(
      (1, Map(1 -> Set(3,5))),
      (2, Map(3 -> Set(5,6))),
      (1, Map(1 -> Set(3,4), 7 -> Set(10, 11)))
    
    rdd.reduceByKey(_ combine _)
    

    【讨论】:

      猜你喜欢
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多