У меня есть файл JSON и файл схемы avro, который правильно описывает его структуру.
Затем я преобразую файл JSON с помощью инструментов Avro в файл avro, не получая ошибки, например:
java -jar .\avro-tools-1.7.7.jar fromjson --schema-file .\data.avsc .\data.json > .\data.avro
Затем я преобразую сгенерированный файл Avro обратно в JSON, чтобы убедиться, что я получил действительный файл Avro, например:
java -jar .\avro-tools-1.7.7.jar tojson .\data.avro > .\data.json
Это выдает ошибку:
Exception in thread "main" java.io.IOException: Not a data file.
at org.apache.avro.file.DataFileStream.initialize(DataFileStream.java:105)
at org.apache.avro.file.DataFileReader.<init>(DataFileReader.java:97)
at org.apache.avro.tool.DataFileGetMetaTool.run(DataFileGetMetaTool.java:64)
at org.apache.avro.tool.Main.run(Main.java:84)
at org.apache.avro.tool.Main.main(Main.java:73)
Я получаю то же исключение при выполнении 'getschema' или 'getmeta', а также при использовании avro-tools-1.8.2 или avro-tools-1.7.4.
Я также попробовал сделать это с несколькими различными парами данных json и схемы, которые я проверил на достоверность.
Здесь выдается ошибка (в инструментах Avro):
if (!Arrays.equals(DataFileConstants.MAGIC, magic)) {
throw new IOException("Not a data file.");
}
Кажется, (двоичный) файл Avro не соответствует ожидаемому файлу Avro из-за нескольких символов в начале.
Я проверил все остальные вопросы, касающиеся stackoverflow, относительно этой ошибки, но никто из них не помог Я использовал командную строку в Windows 10 PowerShell.
См. https://www.michael -noll.com / blog / 2013/03/17 / чтение-и-запись-авто-файлов-из-командной строки / # json-to-binary-avro
Кто-нибудь понял, что, черт возьми, здесь происходит?
UPDATE:
Преобразование работает, если я делаю это на виртуальной машине Cloudera, а не в Windows. Только несколько укусов в начале отличаются в сгенерированных файлах Avro.