我试图从许多不同的.csv文件中读取数据(所有文件都具有相同的“结构”),使用Spark执行一些操作,最后以Hudi格式保存它们。
要将数据存储在同一个Hudi表中,我认为最好的方法是在执行写操作时使用append方法。
问题是这样做会产生大量的小文件,其总和的维度比输入数据集的大小要大得多(在某些情况下是10倍)。
这是我对Hudi的配置:
hudi_options = {
'hoodie.table.name': tableName,
'hoodie.datasource.write.recordkey.field': 'uuid',
'hoodie.datasource.write.partitionpath.field': 'main_partition',
'hoodie.datasource.write.table.name': tableName,
'hoodie.datasource.write.operation': 'upsert',
'hoodie.datasource.write.precombine.field': 'ts',
'hoodie.upsert.shuffle.parallelism': 10,
'hoodie.insert.shuffle.parallelism': 10,
'hoodie.delete.shuffle.parallelism': 10
}
在执行写op时,如下所示:
result_df.write.format("hudi").options(**hudi_options).mode("append").save(basePath)
其中,result_df是一个,具有相同的模式,但具有不同的数据,并且basePath是常量。
我检查了输出文件的内容,它们有正确的模式/数据。那么,是否有一种方法将数据附加到同一个Hudi表文件?
我对apache和Hudi相当陌生,所以任何帮助/建议都将不胜感激;-)
发布于 2021-08-18 13:35:40
Apache遵循MVCC (多验证并发控制)的原理,因此每次写入都会在以下情况下创建现有文件的新版本: 1.如果文件大小小于默认的最大文件大小: 100 MB 2。如果要更新现有文件中的现有记录。将这两个选项添加到您的hudi_options中,它在任何给定时间只保存最新的两个版本:"hoodie.cleaner.commits.retained":1,"hoodie.keep.min.commits":2
发布于 2021-04-20 04:03:09
请提出一个github问题(httsp://github.com/apache/hudi/ timely ),以获得社区的及时响应。
https://stackoverflow.com/questions/67094217
复制相似问题