我试着把avro格式的数据放到hive中。但我的数据集中的每一列都合并到配置单元表中的一列中。
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)
在配置单元中保存数据集:
Dataset<obj1>.write()
.mode(SaveMode.Overwrite)
.partitionBy("a")
.format("com.databricks.spark.avro")
.option("recordName", "recordName_custom")
.option("recordNamespace", "recordNamespace_custom")
.saveAsTable("DB.TABLE");
在配置单元中创建的表的结果:
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修复以检测新分区。
有什么解决方案吗,最佳实践建议?
使用的版本:
com.databricks,spark-avro\ U 2.11:4.0.0版
Spark:2.3.2
hadoop:2.3.2版
hdfs:3.1.1.3.1
配置单元:3.1.0
暂无答案!
目前还没有任何答案,快来回答吧!