当前位置: 首页 > 知识库问答 >
问题:

无模式JSON到Apache梁“行”类型?

赵英哲
2023-03-14

是否有一种方法可以使用Java SDK将任意的无模式JSON字符串转换为Apache Beam“行”类型?如果不是,是否可以从现有对象派生出一个Beam模式类型?

我找到了JsonToRow和ParseJsons的文档,但它们需要提供模式或POJO类才能工作。我还发现,您可以将JSON字符串读入BigQuery TableRow,但似乎没有一种方法可以将TableRow转换为不需要已经有一个模式的Row。

共有2个答案

云隐水
2023-03-14

不幸的是,一般的答案似乎是“否”,尽管有些特定情况下的答案可能是“是”。

问题是模式与JSON数据类型不是100%兼容,特别是因为数组字段类型。
在JSON中,list的元素可能具有不同的数据类型,但Beam中的模式要求每个元素的数组类型相同。此类型可以是另一个行,甚至是逻辑类型,但所有元素必须相同。
不幸的是,使用行替换数组并不完全有效。虽然行字段是位置字段,但它们也被命名,使它们更接近地图。此外,如果数据集包含不同长度的JSON列表,那么每一行都将具有不同的模式,这将产生不希望的后果。

因此,如果您的JSON数据不使用任意类型的列表,您应该可以。也就是说,Beam没有提供任何从JSON派生模式的实用程序,因此您需要自己创建解决方案

於彬
2023-03-14

不,这是不可能的,因为Row(以及使用它的框架)需要在构建时了解模式。On选项是在构造时读取一小部分数据以推断模式,并使用它调用JsonToRow转换。

 类似资料:
  • 当我们需要将抽象与其实现分离时,使用Bridge,以便两者可以独立变化。 这种类型的设计模式属于结构模式,因为这种模式通过在它们之间提供桥接结构来分离实现类和抽象类。 这种模式涉及一个接口,它充当一个桥梁,使具体类的功能独立于接口实现者类。 两种类型的类都可以在结构上进行更改而不会相互影响。 我们通过以下示例演示Bridge模式的使用,其中可以使用相同的抽象类方法但不同的桥实现者类以不同的颜色绘制

  • 我知道number包括integer,但我可以明确定义一个“type”:“integer”。我是说这会违反规范吗?

  • 我想强制内容类型为application/json,但我有一个模式“no cors”,实际上内容类型的返回是:text/plain;charset=UTF-8传递头时是一样的,所以我不知道怎么做。 我已经尝试过使用fetch或Axios,URL在HTTP中,我在本地工作,所以可能是问题所在?我试过邮递员,效果很好。 所以,我想要的内容类型是:application/json,而不是内容类型:tex

  • 本文向大家介绍学习php设计模式 php实现桥梁模式(bridge),包括了学习php设计模式 php实现桥梁模式(bridge)的使用技巧和注意事项,需要的朋友参考一下 一、桥梁模式结构图   二、桥梁模式中主要角色 抽象化(Abstraction)角色:定义抽象类的接口并保存一个对实现化对象的引用。 修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象

  • 本文向大家介绍JavaScript设计模式--桥梁模式引入操作实例分析,包括了JavaScript设计模式--桥梁模式引入操作实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript设计模式--桥梁模式引入操作。分享给大家供大家参考,具体如下: 1.使用情况 (1)事件的监控 #1,利用页面的button来选择宠物的例子(思路) #2,addEvent函数 总结:该种方

  • 问题内容: 我用来将Java对象序列化/反序列化为json。我想在中显示它,并且需要一个架构来做出更好的描述。这将允许我编辑对象并添加比实际更多的数据。 可以提供json模式吗? 是否有其他框架具有该功能? 问题答案: Gson库可能不包含类似的功能,但是您可以尝试使用Jackson库和jackson- module-jsonSchema 模块解决您的问题。例如,对于以下类别: 这个程序: 打印以