我有一个HDFS zip文件URL列表,我想在RDD映射函数中打开每个文件,而不是使用binaryfiles函数。
最初,我尝试如下:
def unzip(hdfs_url):
# read the hdfs file using hdfs python client
rdd = spark.sparkContext.parallelize(list_of_hdfs_urls,16) # make 16 partitions
rdd.map(lambda a: unzip(a))
但是后来我意识到,即使它在整个群集中并行运行,也不会提供数据局部性。
是否有任何方法可以在hdfs文件x
所在的节点上为文件URL x
运行映射功能,如何使spark意识到该位置。
我想以这种方式读取zip文件,以便在pyspark中获得更好的性能,因此,我可以避免在每个执行器上的python和java进程之间进行文件序列化和反序列化。