加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 加入/不使用Spark SQL的两个普通RDD

发布时间:2020-12-16 09:13:42 所属栏目:安全 来源:网络整理
导读:我需要在一个/多个列上加入两个普通的RDD.逻辑上这个操作相当于两个表的数据库连接操作.我不知道这是否可能只有通过Spark SQL或有其他方式来做. 作为一个具体的例子,考虑一下 RDD r1与主键ITEM_ID: (ITEM_ID,ITEM_NAME,ITEM_UNIT,COMPANY_ID) 和RDD r2与主
我需要在一个/多个列上加入两个普通的RDD.逻辑上这个操作相当于两个表的数据库连接操作.我不知道这是否可能只有通过Spark SQL或有其他方式来做.

作为一个具体的例子,考虑一下
RDD r1与主键ITEM_ID:

(ITEM_ID,ITEM_NAME,ITEM_UNIT,COMPANY_ID)

和RDD r2与主键COMPANY_ID:

(COMPANY_ID,COMPANY_NAME,COMPANY_CITY)

我想加入r1和r2.

如何才能做到这一点?

解决方法

Soumya Simanta给了一个很好的答案.然而,连接的RDD中的值是可迭代的,因此结果可能与普通表加入不太相似.

或者,您可以:

val mappedItems = items.map(item => (item.companyId,item))
val mappedComp = companies.map(comp => (comp.companyId,comp))
mappedItems.join(mappedComp).take(10).foreach(println)

输出将是:

(c1,(Item(1,first,2,c1),Company(c1,company-1,city-1)))
(c1,(Item(2,second,city-1)))
(c2,(Item(3,third,c2),Company(c2,company-2,city-2)))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读