Apache Flink:如何处理多个领域的记录?

时间:2018-06-17 14:35:29

标签: java apache-flink

我正在使用 .tsv 具有 61 列的文件。我想进行一些DataSet转换,但 Flink 中的最大列TupleTuple25,其中包含 25 列。

有没有办法实现我自己的Tuple包含 61 列?我尝试扩展Tuple类,但是当我尝试将.tsv文件的行映射到元组时,我得到:
java.lang.IllegalArgumentException: The tuple type exceeds the maximum supported arity

如果我没有扩展Tuple类,我会成功地将这些行映射到元组,但是当我尝试进行一些DataSet转换时,我会遇到异常:

ds1
            .join(ds2)
            .where(0)
            .equalTo(0)
            .writeAsText("./result.tsv", FileSystem.WriteMode.OVERWRITE)
            .setParallelism(1);

例外:org.apache.flink.api.common.InvalidProgramException: Specifying keys via field positions is only valid for tuple data types.

有没有办法实现自定义Tuple类或任何其他方式来处理这些转换?

1 个答案:

答案 0 :(得分:3)

您可以使用自己的自定义POJO数据类型,其中包含任意数量的列。然后,而不是使用.where(0).equalTo(0)传递自定义KeySelector,如.where((KeySelector<CustomDataType, String>) value -> value.getColumnN())