RDD的分区操作算子-mapPartitions算子

wux_labs wux_labs 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

mapPartitions算子与map算子类似,调用一个指定的函数对RDD中的元素进行处理,生成一个新的RDD。与map算子不同的是,map算子的函数每次处理一个元素,RDD中有多少个元素,函数就会被调用多少次,而mapPartitions算子每次处理RDD的一个分区,RDD有多少个分区,函数就会被调用多少次。mapPartitions算子的定义如下:

def mapPartitions(
self: "RDD[T]",
f: Callable[[Iterable[T]], Iterable[U]],
preservesPartitioning: bool = False
) -> "RDD[U]"

案例:

rdd1 = sc.parallelize(["Hello Python", "Hello Spark You", "Hello Python Spark", "You know PySpark"])

print("map处理的类型:", rdd1.map(lambda x: type(x)).collect())
print("mapPartitions处理的类型:", rdd1.mapPartitions(lambda x: [type(x)]).collect())

print("map转换的结果:", rdd1.map(lambda x: (x, len(x))).collect())
print("mapPartitions转换的结果:", rdd1.mapPartitions(lambda x: [(x1, len(x1)) for x1 in list(x)]).collect())
...全文
评论
收藏 已收藏
分享
返回顶部