当前位置: 首页 > 知识库问答 >
问题:

加入多个rdds

西门正平
2023-03-14

我有4个rdd类型的RDD:((int,int,int),values),我的rdds是

rdd1: ((a,b,c), value) 
rdd2:((a,d,e),valueA) 
rdd3:((f,b,g),valueB)
rdd4:((h,i,c),valueC) 

如何加入RDD,比如rdd1加入“A”上的rdd2;rdd1加入“B”上的rdd2;rdd1加入“C”上的rdd3

那么在Scala中的输出是finalrdd:((a,b,c),valueA,valueB,valueC,value))

val newrdd2=rdd2.map{case( (a,b,c),d)=>(a,d)}.collectAsMap
val joined=rdd1.map{case( (a,b,c),d)=>(newrdd2.get(a).get,b,c,d)} 

rdd1: ((1,2,3),animals)
rdd2:((1,anyInt,anyInt),cat)
rdd3:((anyInt,2,anyInt),cow )
rdd 4: ((anyInt,anyInt,3),parrot)

输出应该是((1,2,3),动物,猫,牛,鹦鹉)

共有1个答案

逄征
2023-03-14

RDDs上有一个方便的join方法,但是您需要用特定的join键来键控它,这是Spark用于分区和洗牌的。

从文档中:

join(otherDataset,[numTasks]):当调用类型为(K,V)和(K,W)的数据集时,返回一个由(K,(V,W))对组成的数据集,每个键都有所有元素对。外部连接通过leftOuterJoin、rightOuterJoin和fullouterjoin得到支持。

val rdd1KeyA = rdd1.map(x => (x._1._1, (x._1._2, x._1._3. x._2) // RDD(a, (b,c,value))
val rdd2KeyA = rdd2.map(x => (x._1._1, x._2) // RDD(a, valueA)
val joined1 = rdd1KeyA.join(rdd2KeyA) // RDD(a, ((b,c,value), valueA))

val rdd3KeyB = rdd3.map(x => (x._1._2, x._2) // RDD(b, valueB)
val joined1KeyB = joined1.map(x => (x._2._1._1, (x._1, x._2._1._2, x._2._1._3. x._2._2) // RDD(b, (a, c, value, valueA))
val joined2 = joined1KeyB.join(rdd3keyB) // RDD(b, ((a, c, value, valueA), valueB))
 类似资料:
  • 我正在尝试通过加入来获取记录。我对Spring是个新手。我知道每个实体(表)都有单独的存储库,在实现时需要定义主键的实体和数据类型。 谁能建议我如何通过连接两个表来获取记录。 我有两个回购如下: 我想加入以上两个实体(AEntity,BEntity)。我知道我可以使用以下内容进行自定义查询: 但是,我可以使用连接编写相同类型的查询(连接查询)。我需要有一个单独的存储库来实现其他一些类吗? 谁能帮忙

  • 目前一个手机号仅能加入一家企业,若您的员工已加入其他企业则需要退出上一企业。 当您在用车管理后台添加改名员工时,将自动向他发送APP内推送及短信。 若员工同意加入您的企业,将自动退出原企业。此时您的添加成功。 Nunc nec massa nec est interdum suscipit. Donec vel orci quis dolor Nunc nec massa nec est inte

  • 我正在实施一个项目,其中MySql数据被导入到hdfs使用sqoop。它有将近30张桌子。我通过推断模式和注册为临时表来读取每个表作为数据帧。我做这件事有几个问题...1.假设df1到df10的表需要实现几个连接。在MySQL中,查询将是而不是使用是否有其他连接所有数据帧有效地基于条件...

  • 问题内容: 我有三个表:应用程序,权限和applications_permissions 对于应用程序,有两类:免费和商业类(价格=‘0’和价格!=‘0’) 现在,我想为每个许可都知道有多少百分比的应用程序引用了它。而这两个类别 自由: 商业的: 我已经计算出以下查询,但其中不包含没有应用程序的权限ID:/ 我该怎么做呢?我已经尝试了几个小时了(该查询,其他联接),但这使我难以捉摸:/ 问题答案:

  • 我想知道是否可以创建一个从多个表中获取数据的实体。 我有一个基于TableA的实体。 特殊性是,我还需要TableD的数据,它链接到TableC,它链接到TableB最后链接到TableA,带有TableA id 我完全知道我可以在表B、C、D上创建一个实体。但我不需要这些表上的任何数据,除了TableD。B和C只是“一条要走的路”。 http://img11.hostingpics.net/pi

  • 本文向大家介绍如何在Linux上加入多个分区,包括了如何在Linux上加入多个分区的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将使用2个20 GB的驱动器在Linux上创建一个单一分区,以形成40 GB的单个安装点,以便我们可以将数据存储在一个具有更大空间的地方。在这里,我们使用一个名为“ mhddfs ”的软件包,该软件包是Linux的驱动程序,它将多个安装点组合到一个虚拟磁盘中。这