Я пытаюсь создать Hive external table
поверх некоторых файлов avro
, которые генерируются с использованием spark-scala
. Я использую CDH 5.16
, у которого есть hive 1.1
, spark 1.6
.
Я создал hive external table
, который успешно запустился. Но когда я запрашиваю данные, я получаю NULL
для всех столбцов. Моя проблема похоже на это
После некоторых исследований я обнаружил, что это может быть проблема со схемой. Но я не смог найти файл схемы для этих файлов avro в этом месте.
Я новичок в типе файлов avro
. Может кто-нибудь, пожалуйста, помогите мне здесь.
Ниже приведен фрагмент кода spark
, где я сохранил файл как avro
:
df.write.mode(SaveMode.Overwrite).format("com.databricks.spark.avro").save("hdfs:path/user/hive/warehouse/transform.db/prod_order_avro")
Ниже приведен мой оператор создания внешней таблицы улья:
create external table prod_order_avro
(ProductID string,
ProductName string,
categoryname string,
OrderDate string,
Freight string,
OrderID string,
ShipperID string,
Quantity string,
Sales string,
Discount string,
COS string,
GP string,
CategoryID string,
oh_Updated_time string,
od_Updated_time string
)
STORED AS AVRO
LOCATION '/user/hive/warehouse/transform.db/prod_order_avro';
Ниже приведен результат, который я получаю, когда запрашиваю данные: select * from prod_order_avro
В то же время, когда я читаю эти файлы avro
, используя spark-scala
как dataframe
, и печатаю их, я получаю правильный результат. Ниже приведен код spark
, который я использовал для чтения этих данных:
val df=hiveContext.read.format("com.databricks.spark.avro").option("header","true").load("hdfs:path/user/hive/warehouse/transform.db/prod_order_avro")
Мой вопрос,
- Нужно ли мне при создании этих файлов
avro
изменять кодspark
для создания файлов схемы отдельно или он будет встроен
в файлы. Если нужно отдельно, то как этого добиться? - Если нет, как создать таблицу
hive
, чтобы схема автоматически извлекалась из файла. Я читал, что в последней версии куст сам решает эту проблему, если в файлах присутствует схема.
Пожалуйста, помогите мне здесь