/ / Чи може вулик деріаріалізувати байти avro до наданої схеми? - hadoop, вулик, hdfs, avro

Чи може вуглець десеріалізувати avro байти до схеми, що надаються? - hadoop, вулик, hdfs, avro

У мене файл Avro для завантаження у вулик, але мій файл знаходиться у двійковій формі. Який десеріалізатор слід використовувати, щоб змусити двійковий аврор у вулику?

Я не хочу двійкових даних у вулику, але розшифрованих бінарних даних.

Ось так я створюю свою таблицю.

СТВОРИТИ ТАБЛИЦЮ kst7 РЯДКА ФОРМУВАННЯ SERDE "орг.апаче.hadoop.hive.serde2.avro.AvroSerDe " ЗБЕРІГАЄТЬСЯ ЯК ІНПУТФОРМАТ "org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat" РЕЗУЛЬТАТ "org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat" TBLPROPERTIES ( "avro.schema.url" = "pathtoavsc.avsc");

Коли я використовую вищезгадану командну таблицю, створюється, дані завантажуються, але коли я вибираю * з таблиці, я отримую нижче помилку:

Помилка за винятком java.io.IOException: org.apache.avro.AvroTypeException: Знайдено байтів, очікуючи об'єднання

файл avsc:

{
"namespace": "com.nimesh.tripod.avro.enrichment",
"type": "record",
"name": "EnrichmentData",
"fields": [
{"name": "rowKey", "type": ["null", {"type":"string","avro.java.string":"String"}], "default": null},
{"name": "ownerGuid", "type": ["null", {"type":"string","avro.java.string":"String"}], "default": null},
{"name": "autotagsEnrichment", "type": ["bytes", "null", {
"namespace": "com.nimesh.tripod.avro.enrichment",
"type": "record",
"name": "AutotagEnrichment",
"fields": [
{"name": "version", "type": ["null", {"type":"string","avro.java.string":"String"}], "default": null},
{"name": "autotags", "type": ["null", {"type": "array", "items": {
"namespace": "com.nimesh.tripod.avro.enrichment",
"type": "record",
"name": "Autotag",
"fields": [
{"name": "tag", "type": ["null", {"type":"string","avro.java.string":"String"}], "default": null},
{"name": "score", "type": ["null", "double"], "default": null}
]
}}], "default": null}
]
}], "default": null},
{"name": "colorEnrichment", "type": ["bytes","null", {
"namespace": "com.nimesh.tripod.avro.enrichment",
"type": "record",
"name": "ColorEnrichment",
"fields": [
{"name": "version", "type": ["null", {"type":"string","avro.java.string":"String"}], "default": null},
{"name": "color", "type": ["null", {"type": "array", "items": {
"namespace": "com.nimesh.tripod.avro.enrichment",
"type": "record",
"name": "Color",
"fields": [
{"name": "color", "type": ["null", {"type":"string","avro.java.string":"String"}], "default": null},
{"name": "score", "type": ["null", "double"], "default": null}
]
}}], "default": null}
]
}], "default": null}
]
}

Відповіді:

0 для відповіді № 1

Я думаю, що ви шукаєте SERDEPROPERTIES а не TBLPROPERTIES

ROW FORMAT SERDE "org.apache.hadoop.hive.serde2.avro.AvroSerDe"
WITH SERDEPROPERTIES ("avro.schema.url"="pathtoschema.avsc")

В іншому випадку спробуйте вибрати окремі поля, поки не знайдете те, що викликає помилку, а потім перевірте, які типи (типи) AVSC відображаються в таблиці вуликів.