将大型镶木地板文件转换为csv

时间:2018-05-31 15:02:03

标签: python python-2.7 apache-spark parquet

我试图读取一个非常大的镶木地板文件(10GB),我无法控制如何生成(例如,使文件部分变小)。

如何最好地读/写这些数据?我想从文件或缓冲区流式传输它?

我目前的代码如下:

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 :(得分:0)

根据镶木地板文件的行组大小,您可能想尝试使用fastparquet。它可以在pypi和conda repo上找到。

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)