Java 如何将数据附加到现有拼花地板文件中

Java 如何将数据附加到现有拼花地板文件中,java,hadoop,parquet,Java,Hadoop,Parquet,我使用以下代码创建ParquetWriter并向其写入记录 ParquetWriter<GenericRecord> parquetWriter = new ParquetWriter(path, writeSupport, CompressionCodecName.SNAPPY, BLOCK_SIZE, PAGE_SIZE); final GenericRecord record = new GenericData.Record(avroSchema); 但它只允许创建新文件(

我使用以下代码创建ParquetWriter并向其写入记录

ParquetWriter<GenericRecord> parquetWriter = new ParquetWriter(path, writeSupport, CompressionCodecName.SNAPPY, BLOCK_SIZE, PAGE_SIZE);

final GenericRecord record = new GenericData.Record(avroSchema);
但它只允许创建新文件(在指定的路径上)。
是否有方法将数据附加到现有的拼花地板文件(路径)?缓存parquetWriter在我的情况下是不可行的。

Parquet是一个列文件,它优化了将所有列一起写入。如果需要进行任何编辑,则需要重写文件

来自维基

面向列的数据库将一列的所有值序列化在一起,然后是下一列的值,依此类推。对于我们的示例表,数据将以以下方式存储:

10:001,12:002,11:003,22:004;
Smith:001,Jones:002,Johnson:003,Jones:004;
Joe:001,Mary:002,Cathy:003,Bob:004;
40000:001,50000:002,44000:003,55000:004;
一些链接


有一个名为append的Spark API保存模式,我相信它解决了您的问题

使用示例:

df.write.mode('append').parquet('parquet_data_file')

上述答案是不准确的。拼花地板将列分割成块,并允许将列的一部分存储在单个文件中的多个块中,因此可以进行追加。如果你阅读了拼花背后的设计理念——很明显,格式是为追加而设计的,从块页脚结构判断。我认为拼花客户端API不支持追加,我知道spark中有追加,但我对只支持读取所需块的列存储有疑问。在这种情况下,append的工作原理可能是在现有的列块中追加。您是否有一个包含架构细节的链接。由于parquet客户端API不支持Append How can spark?此代码通过添加新文件写入parquet文件夹,但不会影响现有文件,正如@agonen所述,它会创建一个新文件。有人知道有没有办法将数据附加到现有文件中吗?
df.write.mode('append').parquet('parquet_data_file')