クラスタメトリックを取得し、古いバージョンのCloudera APIを使用してHDFSファイルにデータを書き込むスケジューラがあります。しかし、最近、JARと元のコードエラーを例外で更新しました。Apache Parquet形式でデータを書き込む
java.lang.ClassCastException: org.apache.hadoop.io.ArrayWritable cannot be cast to org.apache.hadoop.hive.serde2.io.ParquetHiveRecord
at org.apache.hadoop.hive.ql.io.parquet.write.DataWritableWriteSupport.write(DataWritableWriteSupport.java:31)
at parquet.hadoop.InternalParquetRecordWriter.write(InternalParquetRecordWriter.java:116)
at parquet.hadoop.ParquetWriter.write(ParquetWriter.java:324)
ParquetHiveRecordクラスを使用する際には、寄せ集め形式のデータ(POJO)を記述する必要があります。 (タイプParquetWriterの) "作家" の
Writable[] values = new Writable[20];
... // populate values with all values
ArrayWritable value = new ArrayWritable(Writable.class, values);
writer.write(value); // <-- Getting exception here
詳細:以下
コードサンプル
MessageType schema = MessageTypeParser.parseMessageType(SCHEMA); // SCHEMA is a string with our schema definition
ParquetWriter<ArrayWritable> writer = new ParquetWriter<ArrayWritable>(fileName, new
DataWritableWriteSupport() {
@Override
public WriteContext init(Configuration conf) {
if (conf.get(DataWritableWriteSupport.PARQUET_HIVE_SCHEMA) == null)
conf.set(DataWritableWriteSupport.PARQUET_HIVE_SCHEMA, schema.toString());
}
});
はまた、我々は今5.8を使用して、前CDHとCM 5.5.1を使用していました。 3
ありがとうございます!
コードはありません。あなたのソースコードを提供してください –
確かに、コードサンプルで質問を更新しました。 –