Я пытаюсь преобразовать текстовые файлы в файлы avro, используя Cascading 3.0.2 и avro-схему 2.5. Ниже приведены несколько полей из Avro схемы:Avro Scheme Write Union of Null и Double Integer Boolean
{ "type":"record", "name":"root", "namespace":"", "fields":[
{"name":"Key","type":"int","doc":"10,NOT NULL, Max Profiled Length=7, Max Profiled Value=1100367"},
{"name":"SampleCount","type":["int","null"],"doc":"10,NULL"},
{"name":"TestAmount","type":["double","null"] ,"doc":"20,NULL"},
{"name":"SampleAmount","type":["double","null"],"doc":"20,NULL"},
{"name":"Comments","type":["null","string"],"doc":"100,NULL"},
{"name":"ActiveFg","type":"boolean","doc":"5,NOT NULL"},
{"name":"MaxChangedDt","type":"string","doc":"20,NOT NULL,YYYY-MM-DD HH24:MI:SS,Last Record Changed Date."}
]
}
Когда я пытаюсь запустить программу преобразования с помощью данной схемы я получаю следующее сообщение об ошибке:
Error for Sample 1:
Caused by: org.apache.avro.UnresolvedUnionException: Not in union ["int","null"]: 1
at org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:600)
at org.apache.avro.generic.GenericDatumWriter.resolveUnion(GenericDatumWriter.java:151)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:71)
at org.apache.avro.reflect.ReflectDatumWriter.write(ReflectDatumWriter.java:143)
at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:114)
at org.apache.avro.reflect.ReflectDatumWriter.writeField(ReflectDatumWriter.java:175)
at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:66)
at org.apache.avro.reflect.ReflectDatumWriter.write(ReflectDatumWriter.java:143)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58)
at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:290)
... 29 more
Error for Sample 2:
Caused by: org.apache.avro.UnresolvedUnionException: Not in union ["double","null"]: 46.9158
at org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:600)
at org.apache.avro.generic.GenericDatumWriter.resolveUnion(GenericDatumWriter.java:151)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:71)
at org.apache.avro.reflect.ReflectDatumWriter.write(ReflectDatumWriter.java:143)
at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:114)
at org.apache.avro.reflect.ReflectDatumWriter.writeField(ReflectDatumWriter.java:175)
at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:66)
at org.apache.avro.reflect.ReflectDatumWriter.write(ReflectDatumWriter.java:143)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58)
at org.apache.avro.file.DataFileWriter.append(DataFileWriter.java:290)
... 29 more
Получение аналогичной ошибки для всех двойных и межд поля типа union в файле. Если я удаляю типы объединения для Int и Double и присваиваю не нулевые значения по умолчанию в пользовательской функции Каждая функция работает нормально. Может ли кто-нибудь помочь мне в решении обработки нулей в double и integer при записи в файлы avro без необходимости присваивать значения по умолчанию. Пользователи данных не хотят, чтобы фактические значения данных были изменены от источника. Я также не хочу записывать данные как String. Союз null, строка отлично работает.
Пробовал, что. Дает такую же ошибку. Я попытался работать с отладкой, и проблема преобразования записей с каскадного объекта [] в datum с использованием Avro Wrapper не переносит перенос типа данных и пытается записать целые, двойные и логические значения в виде строки. Нулевые значения работают нормально. Я работаю над исправлением на каскадной стороне в авр-схеме. –