[英]How to use mapPartitions in pyspark
遵循Apache Spark文档后,我尝试使用mapPartition模块进行试验。 在下面的代码中,我希望看到初始RDD就像函数myfunc
我只是在打印完值后返回迭代器。 但是当我在RDD上进行collect
时,它是空的。
from pyspark import SparkConf
from pyspark import SparkContext
def myfunc(it):
print(it.next())
return it
def fun1(sc):
n = 5
rdd = sc.parallelize([x for x in range(n+1)], n)
print(rdd.mapPartitions(myfunc).collect())
if __name__ == "__main__":
conf = SparkConf().setMaster("local[*]")
conf = conf.setAppName("TEST2")
sc = SparkContext(conf = conf)
fun1(sc)
mapPartitions
在这里不相关。 迭代器(此处为itertools.chain
)是有状态的,只能遍历一次。 调用它时, it.next()
会读取并丢弃第一个元素,返回的是序列的尾部。
当分区只有一个项目时(除了一个项目,其他所有项目都应该如此),您可以有效地丢弃整个分区。
一些注意事项:
next
使用方式不可移植,并且无法在Python 3中使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.