web-dev-qa-db-ja.com

AWS s3バケットから寄木細工のデータを読み取る

Aws s3から寄木細工のデータを読み取る必要があります。これにaws sdkを使用すると、次のような入力ストリームを取得できます。

S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, bucketKey));
InputStream inputStream = object.getObjectContent();

しかし、Apacheパーケットリーダーは次のようなローカルファイルのみを使用します。

ParquetReader<Group> reader =
                    ParquetReader.builder(new GroupReadSupport(), new Path(file.getAbsolutePath()))
                            .withConf(conf)
                            .build();
reader.read()

だから私は寄木細工のファイルの入力ストリームをどのように解析するのかわかりません。たとえばcsvファイルの場合、inputstreamを使用するCSVParserがあります。

この目標にsparkを使用するための解決策を知っています。このように:

SparkSession spark = SparkSession
                .builder()
                .getOrCreate();
Dataset<Row> ds = spark.read().parquet("s3a://bucketName/file.parquet");

でもスパークは使えません。

誰かがs3から寄木細工のデータを読み取るための解決策を教えてもらえますか?

12
Alexander
String SCHEMA_TEMPLATE = "{" +
                        "\"type\": \"record\",\n" +
                        "    \"name\": \"schema\",\n" +
                        "    \"fields\": [\n" +
                        "        {\"name\": \"timeStamp\", \"type\": \"string\"},\n" +
                        "        {\"name\": \"temperature\", \"type\": \"double\"},\n" +
                        "        {\"name\": \"pressure\", \"type\": \"double\"}\n" +
                        "    ]" +
                        "}";
String PATH_SCHEMA = "s3a";
Path internalPath = new Path(PATH_SCHEMA, bucketName, folderName);
Schema schema = new Schema.Parser().parse(SCHEMA_TEMPLATE);
Configuration configuration = new Configuration();
AvroReadSupport.setRequestedProjection(configuration, schema);
ParquetReader<GenericRecord> = AvroParquetReader.GenericRecord>builder(internalPath).withConf(configuration).build();
GenericRecord genericRecord = parquetReader.read();

while(genericRecord != null) {
        Map<String, String> valuesMap = new HashMap<>();
        genericRecord.getSchema().getFields().forEach(field -> valuesMap.put(field.name(), genericRecord.get(field.name()).toString()));

        genericRecord = parquetReader.read();
}

Gradleの依存関係

    compile 'com.amazonaws:aws-Java-sdk:1.11.213'
    compile 'org.Apache.parquet:parquet-avro:1.9.0'
    compile 'org.Apache.parquet:parquet-hadoop:1.9.0'
    compile 'org.Apache.hadoop:hadoop-common:2.8.1'
    compile 'org.Apache.hadoop:hadoop-aws:2.8.1'
    compile 'org.Apache.hadoop:hadoop-client:2.8.1'
4
Alexander