У меня есть список URL-адресов ZIP-файлов HDFS, и я хочу открыть каждый файл внутри функции карты 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))
Но позже я понял, что это не обеспечит локальность данных, даже если они будут проходить параллельно по кластеру.
Есть ли способ запустить функцию map для файла url x
на узле, гдеhdfs файл x
находится, как заставить spark знать об этом месте.
Я хочу читать zip файлы таким образом, чтобы повысить производительность в pyspark, и, следовательно, я могу избежать сериализации и десериализации файловмежду питоном и процессом Java на каждом исполнителе.