Как читать файлы параллельно в DataBricks?

Может кто подскажет, как параллельно читать файлы? Я пробую что-то вроде этого:

def processFile(path):
  df = spark.read.json(path)
  return df.count()

paths = ["...", "..."]

distPaths = sc.parallelize(paths)
counts = distPaths.map(processFile).collect()
print(counts)

Это не удается со следующей ошибкой:

PicklingError: не удалось сериализовать объект: исключение: похоже, вы пытаетесь ссылаться на SparkContext из широковещательной переменной, действия или преобразования. SparkContext можно использовать только в драйвере, а не в коде, который он запускает на рабочих процессах. Для получения дополнительной информации см. SPARK-5063.

Есть ли другой способ оптимизировать это?


person Marat Faskhiev    schedule 19.03.2020    source источник
comment
почему бы не использовать многопоточность?   -  person smx0    schedule 19.03.2020
comment
@ smx0 Не могли бы вы указать мне какие-нибудь документы?   -  person Marat Faskhiev    schedule 19.03.2020
comment
Возможно, вы захотите проверить stackoverflow.com/questions/19322079/   -  person smx0    schedule 19.03.2020
comment
Отвечает ли это на ваш вопрос? Как выполнять независимые преобразования параллельно с помощью PySpark?   -  person user10938362    schedule 19.03.2020
comment
@ user10938362 Мне очень жаль. Я немного новичок в этом. Похоже, что в этих примерах код будет вызываться на том же компьютере. Есть ли способ распределить вычисления между машинами в кластере?   -  person Marat Faskhiev    schedule 19.03.2020
comment
@mazaneicha Спасибо. Не могли бы вы добавить ответ? Отмечу как ответ. В моем случае этого было достаточно. Я сгруппировал исходники по типу и перешел на spark.read.json   -  person Marat Faskhiev    schedule 20.03.2020


Ответы (1)


В вашем конкретном случае вы можете просто передать весь массив paths в DataFrameReader:

df = spark.read.json(paths)

... и чтение его файловых элементов будет распараллелено Spark.

person mazaneicha    schedule 20.03.2020