繁体   English   中英

如何在Pyspark中使用mapPartitions

[英]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()会读取并丢弃第一个元素,返回的是序列的尾部。

当分区只有一个项目时(除了一个项目,其他所有项目都应该如此),您可以有效地丢弃整个分区。

一些注意事项:

  • 将任何东西放入任务内部的stdout通常是没有用的。
  • next使用方式不可移植,并且无法在Python 3中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM