タプル内のさまざまな型を動的に宣言する方法はありますか?Flink:動的タプルサイズと型を宣言する
私は動的にタプルの列数を宣言するための方法を見つけた:
env.readCsvFile(filePath).tupleType(Tuple.getTupleClass(3))
しかし、どのようなタイプのパラメータを指定せずに、それはエラーとしてスロー:
Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: Tuple needs to be parameterized by using generics.
私が欲しかったですタプル内のすべての要素を単純な0として使用する。次の作品は:
env.readCsvFile(filePath).types(String.class, String.class);
これはTuple2(String,String)
タイプになります。しかし私の場合、私はcsvにいくつのデータの列があるのか分かりません。しかし、私はすべての列を文字列として読み込んでいます。 (私は最大25列の制限があることを理解する)
私もCsvInputFormat
のサブタイプを指定することで、読んでみました:
env.readFile(new TupleCsvInputFormat(filePath,TypeInformation.of(String.class), filePath);
しかし、それはコンパイルすることができませんでした。私の場合にこれを使用する方法がわかりませんでした。 Tupleクラスを拡張して同じ(可能であれば)クラスを拡張する方法についても不明でした。 TypeHint
は手前の列の数を知る必要があるようです。
私は他のenv.read...()
メソッドについては分かりません。私はいくつか試しましたが、ignoreFirstLine()
のようないくつかの方法は利用できませんでした。彼らはCsvReader
とだけ付属しています。
だから、誰かが親切に列の数は、(入力から渡された)任意であり、かつ簡単なString
としてTuple
の各要素を読み取ることなら、私はcsvファイルを読むための最良の方法を見つけ出すことができますか?
私は 'mapToObj'の使い方が大好きです。それはきちんとしたトリックでした。ありがとう! :) – Vineet