web-dev-qa-db-ja.com

java

Javaから寄木細工のファイルを作成する方法はありますか?

メモリ(Javaクラス)にデータがあり、後でApache-drillから読み取るために、データを寄木細工のファイルに書き込みたいです。

SQLテーブルにデータを挿入するような簡単な方法はありますか?

GOT IT

助けてくれてありがとう。

回答とこれを組み合わせる link で、寄木細工のファイルを作成し、ドリルでそれを読み戻すことができました。

14
Imbar M.

ParquetWriterのコンストラクターは推奨されていませんが(1.8.1)、ParquetWriter自体はサポートされていません。その内部で抽象ビルダーサブクラスを拡張することにより、ParquetWriterを作成できます。

ここに寄木細工の作成者自身の例 ExampleParquetWriter

  public static class Builder extends ParquetWriter.Builder<Group, Builder> {
    private MessageType type = null;
    private Map<String, String> extraMetaData = new HashMap<String, String>();

    private Builder(Path file) {
      super(file);
    }

    public Builder withType(MessageType type) {
      this.type = type;
      return this;
    }

    public Builder withExtraMetaData(Map<String, String> extraMetaData) {
      this.extraMetaData = extraMetaData;
      return this;
    }

    @Override
    protected Builder self() {
      return this;
    }

    @Override
    protected WriteSupport<Group> getWriteSupport(Configuration conf) {
      return new GroupWriteSupport(type, extraMetaData);
    }

  }

GroupとGroupWriteSupport(Parquetにバンドルされているが、データモデル実装の例としてのみ使用する)を使用したくない場合は、Avro、プロトコルバッファー、またはThriftのインメモリデータモデルを使用できます。これは、Avroを使用してParquetを記述する例です。

try (ParquetWriter<GenericData.Record> writer = AvroParquetWriter
        .<GenericData.Record>builder(fileToWrite)
        .withSchema(schema)
        .withConf(new Configuration())
        .withCompressionCodec(CompressionCodecName.SNAPPY)
        .build()) {
    for (GenericData.Record record : recordsToWrite) {
        writer.write(record);
    }
}   

これらの依存関係が必要になります。

<dependency>
    <groupId>org.Apache.parquet</groupId>
    <artifactId>parquet-avro</artifactId>
    <version>1.8.1</version>
</dependency>

<dependency>
    <groupId>org.Apache.parquet</groupId>
    <artifactId>parquet-hadoop</artifactId>
    <version>1.8.1</version>
</dependency>

完全な例 ここ

18
MaxNevermind

それを行うためのいくつかの可能な方法:

  • Java Parquetライブラリを使用して、コードから直接Parquetを記述します。
  • JDBCを使用してHiveまたはImpalaに接続し、SQLを使用してデータを挿入します。行を1つずつ挿入すると、レコードごとに個別のファイルが作成され、パフォーマンスが完全に損なわれることに注意してください。行のlotsを一度に挿入する必要がありますが、これは簡単ではないので、この方法はお勧めしません。
  • データを区切られたテキストファイルに保存し、HiveまたはImpalaで次の手順を実行します。
    • Hive/Impalaがデータを読み取ることができるように、テキストファイルにテーブルを定義します。このテーブルをtext_table。詳細については、Impalaの Create Table Statement を参照してください。
    • 同一の列を持つ新しいテーブルを作成しますが、ファイル形式としてParquetを指定します。このテーブルをparquet_table
    • 最後にinsert into parquet_table select * from text_tableすべてのデータをテキストファイルから寄木細工のテーブルにコピーします。
2
Zoltan