Прочитать файл Parquet с недопустимыми символами (Apache -Avro) - PullRequest
1 голос
/ 29 мая 2020

У меня есть файлы Parquet, написанные на Python с использованием PyArrow. Теперь я хочу прочитать их с помощью программы Java. Я пробовал следующее, используя Apache Avro:

import java.io.IOException;

import org.apache.avro.generic.GenericRecord;
import org.apache.avro.Schema;
import org.apache.avro.SchemaBuilder;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.parquet.avro.AvroParquetReader;
import org.apache.parquet.avro.AvroReadSupport;
import org.apache.parquet.hadoop.ParquetReader;

public class Main {

    private static Path path = new Path("D:\\pathToFile\\review.parquet");

    public static void main(String[] args) throws IllegalArgumentException {
        try {
            Configuration conf = new Configuration();

            Schema schema = SchemaBuilder.record("lineitem")
                    .fields()
                        .name("reviewID")
                        .aliases("review_id$str")
                        .type().stringType()
                        .noDefault()
                    .endRecord();
                conf.set(AvroReadSupport.AVRO_REQUESTED_PROJECTION, schema.toString());           

            ParquetReader<GenericRecord> reader = AvroParquetReader.<GenericRecord>builder(path)
                .withConf(conf)
                .build();

            GenericRecord r;
            while (null != (r = reader.read())) {

                r.getSchema().getField("reviewID").addAlias("review_id$str");

                Object review_id = r.get("review_id$str");
                String review_id_str = review_id != null ? ("'" + review_id.toString() + "'") : "-";
                System.out.println("review_id: " + review_id_str);

            }
        } catch (IOException e) {
            System.out.println("Error reading parquet file.");
            e.printStackTrace();
        }
    }
}

My Parquet File содержит столбцы, имена которых содержат символы [, ], ., \ и $. (В этом случае файл Parquet содержит столбец review_id$str, значения которого я хочу прочитать). Однако эти символы недопустимы в Avro (см .: https://avro.apache.org/docs/current/spec.html#names). Поэтому я попытался использовать Псевдонимы (см .: http://avro.apache.org/docs/current/spec.html#Aliases). Несмотря на то, что теперь я не получаю никаких «Ошибок недопустимого символа», я все еще не могу получить значения, т.е. ничего не печатается, даже если столбец содержит значения.

Он печатает только:

review_id: -
review_id: -
review_id: -
review_id: -
...

Ожидается, что будет:

review_id: Q1sbwvVQXV2734tPgoKj4Q
review_id: GJXCdrto3ASJOqKeVWPi6Q
review_id: 2TzJjDVDEuAW6MR5Vuc1ug
review_id: yi0R0Ugj_xUx_Nek0-_Qig
...

Я неправильно использую псевдонимы? Можно ли вообще использовать псевдонимы в этой ситуации? Если да, объясните, пожалуйста, как я могу это исправить. Спасибо.

...