当前位置: 首页 > 面试题库 >

如何修复预期的启动工会。在命令行上将JSON转换为Avro时得到了VALUE_NUMBER_INT?

鲜于浩淼
2023-03-14
问题内容

我正在尝试使用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运行此命令。 非常感谢。