笛卡尔积 cartesian
笛卡尔积就是实现两个表格(数据集)的直接生硬拼接,具体过程为:对于左表的每一行数据,去拼接右表的每一行数据,将结果直接拼接。
由于笛卡尔积的连接结果与连接顺序无关,即:没有驱动表和从动表的区别,所以采用“左表”、“右表”这样的称呼,“左表”、“右表”只会影响最终的结果集中每一行记录的左右顺序,不影响整个结果的最终意义。
首先创建两个RDD数据集:
val rdd12 = sc.parallelize(Array(("a",1), ("b",2),("c",3), ("d",4)))
val rdd13 = sc.parallelize(Array(("a","huangbo"), ("b","xuzheng"),("c","liutao"), ("e",5)))
然后对两个RDD求笛卡尔积:
/**
* cartesian(otherRDD)笛卡尔积:thisRDD与otherRDD做笛卡尔积!
* ---- thisRDD与otherRDD可以是任意形式的RDD
* 笛卡尔积:两张表格的生硬拼接,左表的每一行记录去连接右表的每一条记录;
*/
//RDD[((String, Int), (String, Any))]
rdd12.cartesian(rdd13).foreach(println)
运行结果如下:
((a,1),(a,huangbo))
((a,1),(b,xuzheng))
((a,1),(c,liutao))
((a,1),(e,5))
((b,2),(a,huangbo))
((b,2),(b,xuzheng))
((b,2),(c,liutao))
((b,2),(e,5))
((c,3),(a,huangbo))
((c,3),(b,xuzheng))
((c,3),(c,liutao))
((c,3),(e,5))
((d,4),(a,huangbo))
((d,4),(b,xuzheng))
((d,4),(c,liutao))
((