繁体   English   中英

将数据增量地写入镶木地板文件

[英]Write data incrementally to a parquet file

要将大熊猫数据帧写入镶木地板,我需要执行以下操作:

df = pd.DataFrame(DATA)
table = pa.Table.from_pandas(df)
pq.write_table(table, 'DATA.parquet')

但是,如果我说1B行,那么这将无法很好地工作,并且无法容纳在内存中。 在这种情况下,我将如何递增地写入数据。 例如,类似:

DATA = []
BACTCH_SIZE = 10000
with open('largefile.csv') as f:
    for num, line in enumerate(f):
        if (len(DATA) == BATCH_SIZE):
            pq.write_table(pa.Table.from_pandas(pd.DataFrame(DATA)), 'DATA.parquet')
            DATA = []
        DATA.append(line.split(','))

if DATA: pq.write_table(pa.Table.from_pandas(pd.DataFrame(DATA)), 'DATA.parquet')

但是,我相信以上内容将继续覆盖镶木地板文件。 我该怎么做相当于追加?

Hadoop并非用于附加。 只需将每批新文件写入一个目录,几乎所有Hadoop API都应该能够读取所有实木复合地板文件

BACTCH_SIZE = 10000
c = 0
with open('largefile.csv') as f:
    for num, line in enumerate(f):
        if len(DATA) == BATCH_SIZE:
            pq.write_table(pa.Table.from_pandas(pd.DataFrame(DATA)), 'DATA.{}.parquet'.format(c))
            DATA = []
            c += 1
        DATA.append(line.split(','))

这也是Spark写入数据的方式。 每个执行者一个文件

但是,如果您的csv很大,只需将其放入HDFS中,然后在其上创建一个Hive表,然后从那里将其转换为实木复合地板即可。 完全不需要熊猫

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM