开发者社区> 问答> 正文

在json schema中如何定义数组字段

我是用的是flink-1.9版本,现在想消费带数组字段的json数据,类似{“field1:” “aaa”, “field2”: [“bbb, “ccc”]} 这种数据格式。

注册schema的时候我使用了field("field2", Types.OBJECT_ARRAY(Types.STRING))这种方式。EnvironmentSetting指定为flink-planner和blink-planner都有问题。

在flink-planner下,会报下面的错误,我跟了下代码,发现是StringArraySerializer.copy方法接收的是String[],传过去的却是Object[]。 Caused by: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String; at org.apache.flink.api.common.typeutils.base.array.StringArraySerializer.copy(StringArraySerializer.java:35) at org.apache.flink.api.java.typeutils.runtime.RowSerializer.copy(RowSerializer.java:93) at org.apache.flink.api.java.typeutils.runtime.RowSerializer.copy(RowSerializer.java:44) at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator(OperatorChain.java:635) ... 13 more

在blink-planner下,程序一启动就会报下面的错误: Exception in thread "main" org.apache.flink.table.api.ValidationException: Type LEGACY(BasicArrayTypeInfo ) of table field 'field2' does not match with type BasicArrayTypeInfo of the field ' field2' of the TableSource return type. at org.apache.flink.table.planner.sources.TableSourceUtil$$anonfun$4.apply(TableSourceUtil.scala:121) at org.apache.flink.table.planner.sources.TableSourceUtil$$anonfun$4.apply(TableSourceUtil.scala:92) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)

请问这个问题有没有人知道怎么解决,定义数组字段有没有其他的方法呢?*来自志愿者整理的flink邮件归档

展开
收起
毛毛虫雨 2021-12-08 11:11:02 706 0
1 条回答
写回答
取消 提交回答
  • 你可以这样用:

    Types.LIST(Types.STRING)*来自志愿者整理的flink邮件归档

    2021-12-08 19:26:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载