Как параллельно записывать файлы JSON в смонтированный каталог с помощью Spark в Databricks

У меня есть RDD из 50 000 файлов JSON, которые мне нужно записать в смонтированный каталог в Spark (Databricks). Смонтированный путь выглядит примерно так /mnt/myblob/mydata (с использованием Azure). Я попробовал следующее, но оказалось, что я не могу использовать dbutils внутри задания Spark.

def write_json(output_path, json_data):
     dbutils.fs.put(output_path, json_data)

В настоящее время я должен передать данные локально (в драйвер), а затем вызвать метод write_json.

records = my_rdd.collect()
for r in records:
     write_json(r['path'], r['json'])

Этот подход работает, но требует вечности для завершения. Есть ли более быстрый способ?


person Jane Wayne    schedule 09.04.2019    source источник
comment
Как выглядит ваш рдд? Есть ли у него один полностью сформированный json для каждой записи?   -  person D3V    schedule 09.04.2019
comment
да, один правильно сформированный json на запись.   -  person Jane Wayne    schedule 09.04.2019


Ответы (1)


Вы можете использовать map для выполнения этой операции параллельно.

def write_json(output_path, json_data):
    with open(output_path, "w") as f:
        f.write(json_data)

my_rdd.map(lambda r: write_json(r['path'], r['json']))
person D3V    schedule 09.04.2019