Панды не могут читать файлы паркета, созданные в PySpark

1

Я пишу файл паркета из Spark DataFrame следующим образом:

df.write.parquet("path/myfile.parquet", mode = "overwrite", compression="gzip")

Это создает папку с несколькими файлами в нем.

Когда я пытаюсь прочитать это в pandas, я получаю следующие ошибки, в зависимости от того, какой парсер я использую:

import pandas as pd
df = pd.read_parquet("path/myfile.parquet", engine="pyarrow")

PyArrow:

Файл "pyarrow\error.pxi", строка 83, в pyarrow.lib.check_status

ArrowIOError: Неверный файл паркета. Коррумпированный нижний колонтитул.

fastparquet:

Файл "C:\Program Files\Anaconda3\lib\site-packages\fastparquet\util.py", строка 38, в default_open возвращает open (режим f)

PermissionError: [Errno 13] Отказано в доступе: 'путь/myfile.parquet'

Я использую следующие версии:

  • Spark 2.4.0
  • Панды 0.23.4
  • пиарроу 0.10.0
  • фастпаркет 0.2.1

Я пробовал gzip так же быстро, как сжатие. Оба не работают. Я, конечно, убедился, что у меня есть файл в месте, где у Python есть права на чтение/запись.

Это уже помогло бы, если бы кто-то смог воспроизвести эту ошибку.

Теги:
pandas
apache-spark
pyspark
parquet

1 ответ

2

Проблема в том, что Spark разбивает файл на части из-за его распределенной природы (каждый исполнитель записывает файл в каталог, который получает имя файла). Это не то, что поддерживается Pandas, который ожидает файл, а не путь.

Вы можете обойти эту проблему по-разному:

  • 1
    Спасибо за ваш ответ. Кажется, что чтение отдельных файлов (ваш второй пункт) работает. Тем не менее, первое, что не работает - похоже, что Pyarrow не может обработать нижний колонтитул PySpark (см. Сообщение об ошибке в вопросе)
  • 1
    @ Томас, я, к сожалению, не уверен насчет нижнего колонтитула.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню