我有一个 HDFS zip 文件 URL 列表,我想在 RDD map 函数中打开每个文件,而不是使用 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))
但后来我意识到这不会提供数据局部性,即使它在集群中并行运行。
有什么方法可以x
在 hdfs 文件所在的节点上为文件 url 运行 map 函数x
,如何让 spark 知道这个位置。
我想以这种方式读取 zip 文件以在 pyspark 中获得更好的性能,因此我可以避免每个执行程序上的 python 和 java 进程之间的文件序列化和反序列化。