spark を使用すると、parquet ファイルを簡単に読み取って、次のコードでケース クラスとして使用できます。
spark.read.parquet("my_parquet_table").as[MyCaseClass]
Flink では、それを行うのに非常に苦労しています。私の Case Class は Avro スキーマに由来するため、SpecificRecord です。
私は次のことを試しました:
val parquetInputFormat = new ParquetRowInputFormat(new Path(path), messageType)
env.readFile(parquetInputFormat, path)
ここでの問題は messageType です。ケース クラスも avro スキーマも有効な messageType に変換できませんでした。私はこれを試しました:
val messageType = ParquetSchemaConverter.toParquetType(TypeInformation.of(classOf[MyCaseClass], true)
次のエラーで終了します。
class org.apache.flink.formats.avro.typeutils.AvroTypeInfo cannot be cast to class org.apache.flink.api.java.typeutils.RowTypeInfo
table-api を使用することもできますが、すべてのテーブル スキーマを自分で作成する必要があり、維持するのが面倒です。誰かが私に実装の例を示したり、それを助けるかもしれない何かを提案したりできれば、大歓迎です。