Google cloud dataflow 如何为KV<;指定编码器;布尔值,映射<;字符串,对象>&燃气轮机;在googlebeam/dataflow中
我有一个在json文件中描述的表,基于此,我希望稍后创建一个集合作为sideInputGoogle cloud dataflow 如何为KV<;指定编码器;布尔值,映射<;字符串,对象>&燃气轮机;在googlebeam/dataflow中,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我有一个在json文件中描述的表,基于此,我希望稍后创建一个集合作为sideInput PCollection pC=p_jsonstring .apply(“创建…”),MapElements.via((字符串输入)->{ 试一试{ ObjectMapper mapper=新的ObjectMapper(); 映射mytable= readValue(输入,新类型引用(){}); 布尔键=(布尔)mytable.get(“mykey”); 返回KV.of(键,mytable); }捕获(IOE异
PCollection pC=p_jsonstring
.apply(“创建…”),MapElements.via((字符串输入)->{
试一试{
ObjectMapper mapper=新的ObjectMapper();
映射mytable=
readValue(输入,新类型引用(){});
布尔键=(布尔)mytable.get(“mykey”);
返回KV.of(键,mytable);
}捕获(IOE异常){
e、 printStackTrace();
返回null;
}
}).withOutputType(新类型描述符(){}));
运行时,我收到以下错误消息:
严重:无法返回create KV../Map.out[PCollection]的默认编码器。纠正以下根本原因之一:
没有手动指定编码器;可以使用.setCoder()执行此操作。
从CoderRegistry推断编码器失败:无法为org.apache.beam.sdk.values.KV>提供默认编码器。纠正以下根本原因之一:
使用注册的CoderFactory生成编码器失败:无法为参数化类型org.apache.beam.sdk.values.KV>提供编码器:无法为java.util.Map提供默认编码器。纠正以下根本原因之一:
使用注册的CoderFactory生成编码器失败:无法为参数化类型java.util.Map提供编码器:无法为java.lang.Object提供默认编码器。纠正以下根本原因之一:
使用已注册的CoderFactory生成编码器失败:无法基于类java.lang的值提供编码器。对象:尚未为该类注册CoderFactory。
从@DefaultCoder注释生成编码器失败:类java.lang.Object没有@DefaultCoder注释
我认为问题主要与Map
中的Object
有关,但在我的例子中,映射值仅在运行时从文件读取json字符串时确定。对象类型可以是字符串、数字或布尔值
>任何建议? < P>我认为罐头应该在这里作为输出类型工作,并且您可以考虑将输入字符串保持为map值中的字符串,并且当您实际上要处理对象时反序列化。如果您只想在这里反序列化,请考虑为反序列化对象创建一个并使用行作为值类。你可以你找到解决办法了吗?