Как выполнить параллельную обработку файлов (pdf, docs, txt, xls) в каталоге в локальной папке на рабочем столе с помощью PySpark? - PullRequest
0 голосов
/ 26 апреля 2019

У меня около 9000 файлов в разных подкаталогах в одном каталоге на локальном рабочем столе.Общий размер каталога составляет около 15 ГБ.Я не хочу проходить через подход программирования на Python, который чрезвычайно трудоемкий.Я хотел бы использовать какую-то распределенную параллельную обработку для этой задачи.Я хочу выполнить следующие действия:

  • Запустить все эти файлы параллельно.
  • Извлечение текста из этих документов (у меня уже есть скрипт на основе tika для извлечения текста из этих файлов)
  • Сохранение имени файла и содержимого (извлеченный текст) в кадре данных.

Я уже выполнил вышеуказанную задачу, используя обычный скрипт на python.Но я хочу использовать Spark / pySpark для выполнения вышеуказанных задач.Я никогда раньше не пользовался Spark, поэтому мне нужны некоторые рекомендации относительно того, что может быть дорожной картой.

Как я могу параллельно передавать эти документы в Spark, а затем применять свой сценарий извлечения к этим документам?Какой подход я могу выбрать?

1 Ответ

0 голосов
/ 26 апреля 2019

spark не оптимален для форматов pdf, xls, docx. Эти форматы имеют собственный тип сжатия и плохо распараллеливаются. Они должны быть полностью загружены в память, чтобы быть распакованными.

Предпочтительными форматами сжатия являются ориентированные на столбцы форматы сжатия, такие как паркетные, орк или плоские файлы, такие как json, txt ... Они могут эффективно обрабатываться по частям без необходимости загружать весь файл в память для распаковки.

Если у вас есть только текстовые файлы, которые имеют разную структуру или неструктурированы, то я рекомендую использовать API RDD для их чтения:

sc.wholeTextFiles(input_directory)

Это загрузит содержимое каждого текстового файла и добавит имя файла к каждой записи.

В противном случае распараллеливание в python с использованием multiprocessing будет более эффективным.

...