5,750
社区成员




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())