基于spark实现表的join操作
来源:互联网 发布:淘宝开放平台sdk下载 编辑:程序博客网 时间:2024/06/16 22:57
1. 自连接
假设存在如下文件:
[root@bluejoe0 ~]# cat categories.csv 1,生活用品,02,数码用品,13,手机,24,华为Mate7,3
每一行的格式为:类别ID,类别名称,父类ID
现在欲输出每个类别的父类别的名称,类似于SQL的自连接,注意到join的外键其实是父类ID。
首先生成“父类ID->子类ID,子类名称”
val categories=sc.textFile("/root/categories.csv")val left = categories.map(_.split(",")).map(x=>(x(2)->Map("id"->x(0),"name"->x(1))))
left的内容为:
Array((0,Map(id -> 1, name -> 生活用品)), (1,Map(id -> 2, name -> 数码用品)), (2,Map(id -> 3, name -> 手机)), (3,Map(id -> 4, name -> 华为Mate7)))
接着生成“父类ID->父类ID,父类名称”
val right = categories.map(_.split(",")).map(x=>(x(0)->Map("pid"->x(0),"pname"->x(1))))
right的内容为:
Array((1,Map(pid -> 1, pname -> 生活用品)), (2,Map(pid -> 2, pname -> 数码用品)), (3,Map(pid -> 3, pname -> 手机)), (4,Map(pid -> 4, pname -> 华为Mate7)))
接下来,将这两个RDD进行合并,并按照key(key都是父类ID)进行reduce:
val merged = (left++right).reduceByKey(_++_)
merged的内容为:
Array((4,Map(pid -> 4, pname -> 华为Mate7)), (0,Map(id -> 1, name -> 生活用品)), (1,Map(id -> 2, name -> 数码用品, pid -> 1, pname -> 生活用品)), (2,Map(id -> 3, name -> 手机, pid -> 2, pname -> 数码用品)), (3,Map(id -> 4, name -> 华为Mate7, pid -> 3, pname -> 手机)))
搞定!!
可以采用flatMap来简化以上的写法:
val merged = categories.map(_.split(",")).flatMap((x)=>Array(x(2)->Map("id"->x(0),"name"->x(1)), x(0)->Map("pid"->x(0),"pname"->x(1)))).reduceByKey(_++_)
结果是一样一样的!!当然代码的可读性大打折扣了~~~
2. 两张表连接
- 基于spark实现表的join操作
- Spark的Dataset操作(五)-多表操作 join
- spark join操作
- spark实现join功能
- spark-spark-SparkSQL的3种Join实现(转)
- 基于spark的adaboost实现
- Spark Scala DataFram join 操作
- Spark中常见join操作
- 2-2、spark的union和join操作演示
- 基于mapreduce的Hadoop join实现
- 基于mapreduce的Hadoop join实现
- Spark SQL 之 Join 实现
- Spark SQL 之 Join 实现
- Spark SQL 之 Join 实现
- Spark 实践 - RDD 的 join操作之需要注意的事项 - RDD为空的join操作
- 基于Spark实现的超大矩阵运算
- 基于spark的网络爬虫实现
- 基于spark的svm算法实现
- AVL树——深入浅出,一目了然
- MySQL的数据关系处理流程
- 访问者模式
- Leetcode: wordBreak
- Leetcode #91 Decode Ways
- 基于spark实现表的join操作
- Linux-命令-find
- Codeforces Round #250 (Div. 1) B. The Child and Zoo(排序+并查集)(常规好题)
- 【小熊刷题】Two Sum II - sorted array
- muduo::EventLoopThread、EventLoopThreadPool分析
- Android下创建一个SQLite数据库
- Javascript高级程序设计第八九章
- 元素查找
- Spring(三): 事务