java - 将 Hive 中的数据集保存为 avro 格式合并列
问题描述
我尝试将来自数据集的数据以 avro 格式放入配置单元。但是我的数据集中的每一列都合并到配置单元表中的一个中。
Dataset<obj1> = ....
Dataset<obj1>.printSchema();
root
|-- a: double (nullable = true)
|-- b: string (nullable = true)
|-- c: string (nullable = true)
|-- d: string (nullable = true)
|-- e: string (nullable = true)
将数据集保存在 Hive 中:
Dataset<obj1>.write()
.mode(SaveMode.Overwrite)
.partitionBy("a")
.format("com.databricks.spark.avro")
.option("recordName", "recordName_custom")
.option("recordNamespace", "recordNamespace_custom")
.saveAsTable("DB.TABLE");
在 hive 中创建的表的结果:
show create table DB.TABLE;
结果 :
CREATE TABLE `DB.TABLE`(
`col` array<string> COMMENT 'from deserializer')
PARTITIONED BY (
`a` string)
...
目前,解决方案之一是将数据集作为 avro 文件放入 HDFS :
Dataset<obj1>
.write()
.mode(SaveMode.Overwrite)
.partitionBy("a")
.format("com.databricks.spark.avro")
.option("recordName", "recordName_custom")
.option("recordNamespace", "recordNamespace_custom")
.save("path");
然后为其创建一个外部表。在批处理结束时,如果需要,我们会执行 MSCK REPAIR 来检测新分区。
任何解决方案,最佳实践建议?
使用的版本:
com.databricks,spark-avro_2.11:4.0.0
Spark:2.3.2
Hadoop:2.3.2
HDFS:3.1.1.3.1
Hive:3.1.0
解决方案
推荐阅读
- r - 有条件地在其他变量的同一列中添加带有变量的行
- angular - 有什么方法可以在角度渲染中使用 *ngFor 的前 5 个结果并在浏览器中显示,其余的可以随着时间的推移加载
- python - 如何使用 python 访问谷歌驱动器中的 SQLite 数据库?
- firebase - 需要自定义可以在 Angular 中使用的 firebase 电子邮件模板
- arrays - C 编程 - 从标准输入读取文本到动态数组或动态链表并打印
- linux - 多次使用同一个文件运行同一个脚本
- javascript - mongodb 聚合方法在 MongoSH 和我的代码中返回不同的结果
- python - 将响应转换为 .csv 文件格式时如何修复 Nan Error
- typescript - 赛普拉斯:打字稿自定义命令不起作用
- css - vercel.json - 如何在标题中排除多个目录?(正则表达式的路径)