Java 将配置单元中的数据集保存为avro格式合并列
我试图将数据集中的数据以avro格式放入hive。但数据集中的每一列都合并到配置单元表中的一列中Java 将配置单元中的数据集保存为avro格式合并列,java,apache-spark,hive,hdfs,avro,Java,Apache Spark,Hive,Hdfs,Avro,我试图将数据集中的数据以avro格式放入hive。但数据集中的每一列都合并到配置单元表中的一列中 Dataset<obj1> = .... Dataset<obj1>.printSchema(); root |-- a: double (nullable = true) |-- b: string (nullable = true) |-- c: string (nullable = true) |-- d: string (nullable = true)
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)
结果:
CREATE TABLE `DB.TABLE`(
`col` array<string> COMMENT 'from deserializer')
PARTITIONED BY (
`a` string)
...
创建表`DB.TABLE`(
`列“反序列化程序中的数组注释”)
被(
`(字符串)
...
目前,解决方案之一是将数据集作为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");
数据集
.write()
.mode(SaveMode.Overwrite)
.分割人(“a”)
.format(“com.databricks.spark.avro”)
.选项(“记录名称”、“记录名称\自定义”)
.option(“recordNamespace”、“recordNamespace\u自定义”)
.保存(“路径”);
然后为其创建一个外部表。
在批处理结束时,如果需要,我们将执行MSCK修复以检测新分区
有什么解决方案,最佳实践建议吗
使用的版本:
com.databricks,spark-avro_2.11:4.0.0火花:2.3.2
Hadoop:2.3.2
HDFS:3.1.1.3.1
蜂巢:3.1.0
CREATE TABLE `DB.TABLE`(
`col` array<string> COMMENT 'from deserializer')
PARTITIONED BY (
`a` string)
...
Dataset<obj1>
.write()
.mode(SaveMode.Overwrite)
.partitionBy("a")
.format("com.databricks.spark.avro")
.option("recordName", "recordName_custom")
.option("recordNamespace", "recordNamespace_custom")
.save("path");