spark如何处理两个RDD的关联问题

发布于 2022-09-04 20:16:23 字数 609 浏览 13 评论 0

spark开发新手遇到如下问题,请大神赐教
问题描述

数据处理过程中计算得到两个RDD:rdd1和rdd2,

1.rdd1显示数据集

(R1,3)
(R2,5)
(R3,5)
(R4,5)
(R5,3)

2.rdd2显示数据集

((R1,R3),2)
((R2,R3),3)
((R2,R5),3)
((R1,R2),1)
((R1,R4),3)
((R3,R4),4)
((R4,R5),1)
((R3,R5),2)
((R2,R4),3)

要求计算 :
((Rx,Ry),α) 其中α = 0.5*(|Rx| + |Ry|) ,|Rx||Ry|为rdd1中RxRy的对应值
比如对rdd2中的第一条记录:
((R1,R3),2) ===> ((R1,R3),(0.5*(3+5))) = ((R1,R3),4)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

游魂 2022-09-11 20:16:23

可以将val rdd1map = rdd1.collectAsMap,然后在rdd2的map中,0.5*(rdd1map.get(k.apply(0)).getOrElse(0) + rdd1map.get(k.apply(1)).getOrElse(0))
大体是这个思路,我也在学习过程中,不能给予完善的解答,抱歉。

魔法少女 2022-09-11 20:16:23

实现rdd关联的话,需要先对rdd进行keyby,然后进行join操作

压抑⊿情绪 2022-09-11 20:16:23

你看下 能否达到你对要求


val spark = SparkSession

  .builder
  .appName(this.getClass.getSimpleName)
  .config("spark.default.parallelism", "3")
  .master("local[3]")
  .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
  .getOrCreate()

val sql = spark.sqlContext
import sql.implicits._

val t1 = spark.sparkContext.makeRDD(List(("R1", 3),
  ("R2", 5),
  ("R3", 5),
  ("R4", 5),
  ("R5", 3))).toDF("name", "v_1")

val t2 = spark.sparkContext.makeRDD(List((("R1", "R3"), 2),
  (("R2", "R3"), 3),
  (("R2", "R5"), 3),
  (("R1", "R2"), 1),
  (("R1", "R4"), 3),
  (("R3", "R4"), 4),
  (("R4", "R5"), 1),
  (("R3", "R5"), 2),
  (("R2", "R4"), 3))).map(row => (row._1._1, row._1._2, row._2)).toDF("name1", "name2", "v_2")

t2.join(t1, t1("name").<=>(t2("name1")))
  .withColumnRenamed("v_1", "name1_v")
  .drop("name")
  .join(t1, t1("name").<=>(t2("name2")))
  .withColumnRenamed("v_1", "name2_v")
  .drop("name")
  //((Rx,Ry),α) 其中α = 0.5*(|Rx| + |Ry|) ,|Rx|和|Ry|为rdd1中Rx和Ry的对应值
  .selectExpr("name1","name2","(name1_v+name2_v)*0.5")
  .show()
  
  |name1|name2|((name1_v + name2_v) * 0.5)|
R2R35.0
R1R34.0
R1R24.0
R3R45.0
R2R45.0
R1R44.0
R3R54.0
R2R54.0
R4R54.0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文