У меня есть 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'])
Этот подход работает, но требует вечности для завершения. Есть ли более быстрый способ?
да, один правильно сформированный json на запись.
Вы можете использовать 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']))
Как выглядит ваш рдд? Есть ли у него один полностью сформированный json для каждой записи?