Spark: распараллеливание URL-адресов hdfs с учетом локализации данных

У меня есть список 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)) 

Но позже я понял, что это не даст данных локальности, даже если они работают параллельно по кластеру.

Есть ли способ запустить функцию карты для URL-адреса файла x на узле, где находится файл hdfs x расположен, как сделать, чтобы Искра узнала об этой местности.

Я хочу читать zip-файлы таким образом, чтобы повысить производительность в pyspark, и, следовательно, я могу избежать сериализации и десериализации файлов между процессами python и java для каждого исполнителя.

0 ответов

Другие вопросы по тегам