首页 > 解决方案 > 将 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

标签: javaapache-sparkhivehdfsavro

解决方案


推荐阅读