我正在尝试使用Avro模式验证JSON文件并写入相应的Avro文件。首先,我定义了以下名为Avro的架构user.avsc
:
{"namespace": "example.avro",
"type": "record",
"name": "user",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
然后创建一个user.json
文件:
{"name": "Alyssa", "favorite_number": 256, "favorite_color": null}
然后尝试运行:
java -jar ~/bin/avro-tools-1.7.7.jar fromjson --schema-file user.avsc user.json > user.avro
但是我得到以下异常:
Exception in thread "main" org.apache.avro.AvroTypeException: Expected start-union. Got VALUE_NUMBER_INT
at org.apache.avro.io.JsonDecoder.error(JsonDecoder.java:697)
at org.apache.avro.io.JsonDecoder.readIndex(JsonDecoder.java:441)
at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
at org.apache.avro.tool.DataFileWriteTool.run(DataFileWriteTool.java:99)
at org.apache.avro.tool.Main.run(Main.java:84)
at org.apache.avro.tool.Main.main(Main.java:73)
我想念什么吗?为什么会出现“期望的开始工会。得到VALUE_NUMBER_INT”的消息。
根据道格·切特(Doug Cutting)的解释,
Avro的JSON编码要求将非null联合值标记为其预期类型。这是因为在JSON中,像[“ bytes”,“ string”]和[“ int”,“
long”]这样的并集是模棱两可的,第一个都编码为JSON字符串,而第二个都编码为JSON数字。
http://avro.apache.org/docs/current/spec.html#json_encoding
因此,您的记录必须编码为:
{"name": "Alyssa", "favorite_number": {"int": 7}, "favorite_color": null}
问题内容: 是否有命令行工具可用于将.plist文件转换为JSON? 如果没有,在Mac上使用Objective-C或C创建一个的方法是什么?例如,有用于Objective- C的JSONKit。如何打开.plist文件,将其传递给JSONKit,然后将其序列化为JSON? 问题答案: 如果您使用的是Mac,则可以在命令行上使用plutil工具(我相信这是开发人员工具附带的工具): 如评论中所述,
文件夹结构是正确的--也就是说,我有一个与node_modules/karma/bin匹配的嵌套文件夹结构,并且我在那个位置有一个名为karma的文件。 我在两个例子中都是从同一个位置开始的。在Visual Studio代码终端或windows命令提示符中运行此命令时,会出现以下错误:“'node_modules'未被识别为内部或外部命令、可操作程序或批处理文件。” 但在GitBash,它工作得很
有一个网站这样做,但我想要一个图书馆或CLI。 谢了!
问题内容: 有没有一种方法可以在不使用Python定义架构的情况下将JSON字符串转换为Avro?还是只有Java才能处理的事情? 问题答案: Apache Avro™1.7.6入门(Python) :
问题内容: 我有一个代码可以使用功能将我的avro记录转换为Row 此功能不适用于嵌套模式。 谁能建议我如何将复杂的架构转换为ROW? 问题答案: 有,但是不幸的是私人的。有一些PR可以将其公开,但是它们从未合并: https://github.com/databricks/spark-avro/pull/89 https://github.com/databricks/spark-avro/pu
我将使用MailgunAPI。 以下是在终端中正常工作的cRUL命令。 我无法理解如何使用Postman运行此命令。 我试图导入cURL命令到邮递员,但它不导入api: key。我真的不明白如何将这个api密钥导入到Postman中以正确运行api。 请帮助我使用Postman运行此命令。 非常感谢。