Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以增量方式将数据写入拼花地板文件_Python_Hadoop_Parquet - Fatal编程技术网

Python 以增量方式将数据写入拼花地板文件

Python 以增量方式将数据写入拼花地板文件,python,hadoop,parquet,Python,Hadoop,Parquet,要从熊猫数据框写入拼花地板,我将执行以下操作: 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

要从熊猫数据框写入拼花地板,我将执行以下操作:

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中,然后在上面创建一个蜂巢表,然后从那里把它转换成拼花地板。根本不需要熊猫