rdd连接变换

join--内连接


结果:

匹配rdd1里还有rdd2里面共同的键,然后去输出


leftOuterJoin -- 左连接


结果:

以左边为主去匹配右边的有就显示,没有就是None


rightOuterJoin -- 右连接


结果:

以右边为主,去匹配左边的


cogroup--全连接


输出结果是一个迭代器所以我们要去循环它:



结果:

所有的全部统计:

subtractByKey -- 减连接


结果:

把RDD1里面和RDD2 键相同的减掉



### 使用 `mapPartitions` 方法处理 Spark RDD #### 定义与功能 `mapPartitions` 是一种转换操作,允许用户定义一个函数应用于每个分区的数据迭代器上。相比于逐个元素映射 (`map`) 的方式,这种方式可以减少开销,因为初始化成本只发生一次而不是每次调用时都重复执行。 #### 函数签名 ```scala def mapPartitions[U: ClassTag]( f: Iterator[T] => Iterator[U], preservesPartitioning: Boolean = false): RDD[U] ``` - 参数 `f`: 接受当前分区内所有记录组成的迭代器作为输入,并返回一个新的迭代器。 - 参数 `preservesPartitioning`: 如果设置为 true,则保持原有的分区策略;默认情况下不保留原有分区特性。 #### 实现细节 当应用此变换到某个 RDD 上时,Spark 将遍历该 RDD 中每一个逻辑上的分区,并将整个分区的内容传递给所提供的函数 `f` 处理。这使得可以在更细粒度级别控制性能优化措施的应用范围,比如缓存连接对象或其他昂贵资源实例化过程仅需在一个地方完成即可[^3]。 #### 示例代码展示 下面是一个简单的例子展示了如何利用 `mapPartitions` 对整数列表进行平方运算: ```scala val conf = new SparkConf().setAppName("Example").setMaster("local[*]") val sc = new SparkContext(conf) // 创建包含十个连续正整数的RDD,并将其划分为三个分区 val rdd = sc.parallelize((1 to 10).toList, 3) // 定义用于处理各分区数据的方法 def squareElements(iterator: Iterator[Int]): Iterator[(Int, Int)] = { iterator.map(x => (x, x * x)) } // 应用mapPartitions转换并将结果收集打印出来 val squaredRdd = rdd.mapPartitions(squareElements) squaredRdd.collect().foreach(println) ``` 这段程序首先配置了一个本地模式运行环境并构建了具有特定数目分区的初始 RDD 。接着定义了一个辅助方法用来计算每一对原始数值及其对应的平方值。最后通过调用 `mapPartitions` 来实现对这些分区内部元素的一次性批量加工,并最终输出得到的结果集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值