Преобразование большого файла паркета в CSV - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь прочитать очень большой файл паркета (10 ГБ), который я не могу контролировать, как создается (например, уменьшая размер файловых частей).

Как лучше всего читать / писать этоданные?Я думаю, потоковое из файла или буфера?

мой текущий код выглядит следующим образом:

from pyspark.sql import SQLContext
from pyspark.sql.types import *

if __name__ == "__main__":
  sc = SparkContext(appName="Parquet2CSV")
  sqlContext = SQLContext(sc)
  readdf = sqlContext.read.parquet('infile.parquet')
  readdf.write.csv('outfile.csv')

это прекрасно работает для небольших файлов .. но для больших, этотерпит неудачу (по сути, уносит мою кучу).

Я смог получить успешный код возврата без записи, но с записью это не удалось.

Что было бы лучшим способом сделатьэто для больших файлов?

1 Ответ

0 голосов
/ 31 мая 2018

В зависимости от размера группы строк файла паркета, вы можете попробовать использовать fastparquet.Он доступен на Pypi и Кондо-репо.

import fastparquet

pfile = fastparquet.ParquetFile('infile.parquet')
with open('out.csv', 'w') as fp:
    for i, df in enumerate(pfile.iter_row_groups()):
        write_header = (i==0)
        df.to_csv(fp, index=False, header=write_header)
...