首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache -如何理解Hudi写操作与savemode?

Apache -如何理解Hudi写操作与savemode?
EN

Stack Overflow用户
提问于 2022-07-26 03:37:58
回答 2查看 412关注 0票数 0

如何理解用upsert编写的hudi操作,而df保存了append呢?既然这将重新插入记录,为什么要追加而不是覆盖?有什么关系呢?如图所示:

EN

回答 2

Stack Overflow用户

发布于 2022-07-26 03:46:47

示例:插入一个DataFrame,为recordKey => _row_key、partitionPath =>分区和precombineKey =>时间戳指定必要的字段名

代码语言:javascript
复制
inputDF.write()
   .format("org.apache.hudi")
   .options(clientOpts) //Where clientOpts is of type Map[String, String]. clientOpts can include any other options necessary.
   .option(DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY(), "_row_key")
   .option(DataSourceWriteOptions.PARTITIONPATH_FIELD_OPT_KEY(), "partition")
   .option(DataSourceWriteOptions.PRECOMBINE_FIELD_OPT_KEY(), "timestamp")
   .option(HoodieWriteConfig.TABLE_NAME, tableName)
   .mode(SaveMode.Append)
   .save(basePath);

生成一些新的旅行,将它们加载到DataFrame中,然后将DataFrame写入Hudi表,如下所示。

代码语言:javascript
复制
   // spark-shell
val inserts = convertToStringList(dataGen.generateInserts(10))
val df = spark.read.json(spark.sparkContext.parallelize(inserts, 2))
df.write.format("hudi").
  options(getQuickstartWriteConfigs).
  option(PRECOMBINE_FIELD_OPT_KEY, "ts").
  option(RECORDKEY_FIELD_OPT_KEY, "uuid").
  option(PARTITIONPATH_FIELD_OPT_KEY, "partitionpath").
  option(TABLE_NAME, tableName).
  mode(Overwrite).
  save(basePath)
票数 0
EN

Stack Overflow用户

发布于 2022-08-07 15:03:02

当您使用overwrite模式时,您告诉spark删除该表并重新创建它(如果使用动态partitionOverwriteMode,则只需重新创建新df中的分区)。

但是,当我们使用append模式时,spark会将新数据附加到磁盘/云存储中现有的旧数据中。使用hudi,我们可以提供额外的操作来合并两个版本的数据,更新新数据中有密钥的旧记录,保留新数据中没有密钥的旧记录,并添加具有新键的新记录。这与覆盖数据完全不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73117484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档