Панды не могут читать файлы паркета, созданные в PySpark - PullRequest
0 голосов
/ 15 января 2019

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

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

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

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

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 открыть назад (режим f)

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

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

  • Spark 2.4.0
  • Панды 0,23,4
  • пиарроу 0.10.0
  • fastparquet 0.2.1

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

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

1 Ответ

0 голосов
/ 15 января 2019

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

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

...