spark transform系列__Cartesian
来源:互联网 发布:windows 10菜单栏隐藏 编辑:程序博客网 时间:2024/06/05 23:06
Cartesian
这个操作返回两个RDD的笛卡尔集.如果两个RDD中某一个RDD的结果集为空集时,这个结果集也是一个空集.
这个操作不会执行shuffle的操作.
def cartesian[U: ClassTag](other: RDD[U]): RDD[(T, U)] = withScope {
new CartesianRDD(sc, this, other)
}
从上面的代码中,可以看出,直接生成了一个CartesianRDD的实例.
这个实例的关键部分:
override def getPartitions: Array[Partition] = {
这个CartesianRDD的Partition的个数是要做笛卡尔集的上层两个RDD的partition的个数的乘积.
// create the cross product split
val array = new Array[Partition](rdd1.partitions.length * rdd2.partitions.length)
for (s1 <- rdd1.partitions; s2 <- rdd2.partitions) {
val idx = s1.index * numPartitionsInRdd2 + s2.index
array(idx) = new CartesianPartition(idx, rdd1, rdd2, s1.index, s2.index)
}
array
}
这里,按第一个RDD的结果集为基准结果集,对两个RDD中各partition的结果进行组合.类似于join.但不通过key进行组合,而是通过partition进行组合.下面代码的for是两层迭代.也就是说rdd1中每个partition的结果集中,都包含有rdd2中所有的partition的结果集.
override def compute(split: Partition, context: TaskContext): Iterator[(T, U)] = {
val currSplit = split.asInstanceOf[CartesianPartition]
for (x <- rdd1.iterator(currSplit.s1, context);
y <- rdd2.iterator(currSplit.s2, context)) yield (x, y)
}
- spark transform系列__Cartesian
- spark transform系列__groupByKey
- spark transform系列__sortByKey
- spark transform系列__reduceByKey
- spark transform系列__sample
- spark transform系列__mapPartitions
- spark transform系列__intersection
- spark transform系列__union
- spark transform系列__distinct
- spark transform系列__aggregateByKey
- spark transform系列__cogroup
- spark transform系列__join
- spark transform系列__Coalesce
- spark-streaming-[3]-Transform
- spark--transform算子--cartesian
- spark--transform算子--coalesce
- spark--transform算子--cogroup
- spark--transform算子--distinct
- Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
- curl(3) 打开邮箱 获取内容
- Android实现从底部弹出的Dialog(二)
- Android Studio插件分享
- Shell注释
- spark transform系列__Cartesian
- Shell字符串
- Shell数组:shell数组的定义、数组长度
- leTV 乐视超级电视上面安装apk
- PHP打印空心菱形
- ffmpeg音频转码,采用swr_convert重取样
- spark transform系列__Coalesce
- How to Convert From Clob to Varchar2 in Oracle
- 【精】超实用新手指南!零基础如何自学UI设计?