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