java—将配置单元中的数据集保存为avro格式的合并列

xxslljrj  于 2021-06-25  发布在  Hive
关注(0)|答案(0)|浏览(179)

我试着把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

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题