我试图读取一个非常大的镶木地板文件(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')
这适用于小文件..但对于大文件,它会失败(基本上是我的堆)。
我能够在写入时获得成功的返回代码,但是在写入时,它会失败。
为大文件执行此操作的最佳方法是什么?
答案 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)