Apache Flink:提取元组的TypeInformation

时间:2016-05-19 02:35:42

标签: java apache-flink

我正在使用FlinkKafkaConsumer09,其中我有一个实现KeyedDeserializationSchema的ByteArrayDeseializationSchema> ,现在在getProducedType中如何提取TypeInformation。

我在文档中读到TypeExtractor.getForClass方法不支持ParameterizedTypes,我应该用TypeExtractor的哪个方法来实现这个?

我认为我们必须使用createTypeInfo方法,能否告诉我如何使用它来返回TypeInformation?

4 个答案:

答案 0 :(得分:1)

如果您的反序列化架构的返回类型是byte[],那么您可以使用PrimitiveArrayTypeInfo.BYTE_PRIMITIVE_ARRAY_TYPE_INFO作为getProducedType的返回值。

答案 1 :(得分:0)

如果你想要一个Tuple2的TypeInformation: return TupleTypeInfo.getBasicAndBasicValueTupleTypeInfo(byte [] .class,byte [] .class) 可能吗?

答案 2 :(得分:0)

Java API中的类型提示

为了帮助Flink无法重建已擦除的泛型类型信息,Java API提供了0.9版本中所谓的类型提示。类型提示告诉系统函数生成的数据集的类型。以下是一个例子:

DataSet<SomeType> result = dataSet
    .map(new MyGenericNonInferrableFunction<Long, SomeType>())
        .returns(SomeType.class);

returns语句指定生成的类型,在本例中是通过类。提示通过

支持类型定义
Classes, for non-parameterized types (no generics)
Strings in the form of returns("Tuple2<Integer, my.SomeType>"), which are parsed and converted to a TypeInformation.
A TypeInformation directly

答案 3 :(得分:0)

你可以尝试这个:

case class CaseClassForYourExpectedMessage(key:String,value:String)

/* getProducedType method */
override def getProducedType: TypeInformation[CaseClassForYourExpectedMessage] =
TypeExtractor.getForClass(classOf[CaseClassForYourExpectedMessage])