Сохранение набора данных в кусте в виде столбца слияния формата avro - PullRequest
3 голосов
/ 20 января 2020

Я пытаюсь положить в улей в формате 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)

Сохраните набор данных в кусте:

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 REPAIR, чтобы обнаружить новый раздел, если это необходимо.

какое-либо решение, лучший совет?

Используемая версия:

com.databricks, spark-avro_2.11: 4.0.0
Искра: 2.3.2
Имеет oop: 2.3.2
HDFS: 3.1.1.3.1
Hive: 3.1.0

...