Apache Spark中的广播变量

时间:2018-02-12 13:15:07

标签: scala apache-spark spark-dataframe distributed-computing

我有一个我已播出的列表。我想要执行此过程,以便两个列表的组合将导致RDD中所有元素的结果列表的大小相同。

diffList查看lct键是否具有相应的值。如果是,那么将获取密钥的值,如果不是,则将其元素与givenList进行比较,并且所有那些不存在的密钥将被赋予值0.0

appendList压缩lctldiffList并应用相关转换。

appendList应该具有列表中所有元素的相同大小。 当我在本地运行此代码时,它运行正常,然后我具有相同大小的每个列表(在RDD的每个元素中)。当我在群集上执行相同的操作时,它会为我提供不同大小的列表。

我只是想知道我是否正确地播放了列表,或者逻辑还有其他问题吗?

val w = sqlContext.read.format("org.elasticsearch.spark.sql").load(weeks)
val agg = w.groupBy("id", "type").agg(sum($"d").as("dur"))
val idc = agg.rdd.map(_.toString).map(x => x.replace("[","")).map(x => x.replace("]","")).map(_.split(",")).map(x => (((x(4),(x(2),x(1))),x(3))))
val grp = idc.map(x => (x._1,x._2.toDouble)).reduceByKey(_+_)
val ust = grp.map(x => (x._1._1,(x._1._2,x._2)))
val lct = ust.groupByKey.map(x => (x._1,x._2.toList))
val lctl = lct.map(x => (x._1,x._2.map(y => y._1),x._2.map(y => y._2)))

val givenList = List(("a","z"), ("c","g"), ("c","t"), ("d","h"), ("y","e"), ("f","l"),("g","r"))    
val listBroadcast = sc.broadcast(givenList)

val diffList = lct.map(x => x._2.map( y => y._1)).map(x => ((listBroadcast.value.diff(x)),List.fill(listBroadcast.value.diff(x).size)(0.0)))

val appendList = lctl.zip(diffList).map(x => (x._1._1,x._1._2 ++ x._2._1,x._1._3 ++ x._2._2)).map(x => (x._1,x._2 zip x._3))

0 个答案:

没有答案