Проблема с производительностью при чтении файлов из GCS с использованием луча apache - PullRequest
2 голосов
/ 07 февраля 2020

Я пытался прочитать данные, используя подстановочный знак из пути gcs. Мои файлы в формате bzip2, и в пути gcs содержится около 300 тыс. Файлов с одинаковым подстановочным выражением. Я использую приведенный ниже фрагмент кода для чтения файлов.

    PCollection<String> val = p
            .apply(FileIO.match()
                    .filepattern("gcsPath"))
            .apply(FileIO.readMatches().withCompression(Compression.BZIP2))
            .apply(MapElements.into(TypeDescriptor.of(String.class)).via((ReadableFile f) -> {
                try {
                    return f.readFullyAsUTF8String();
                } catch (IOException e) {
                    return null;
                }
            }));

Но производительность очень низкая, и чтение этого файла с использованием приведенного выше кода с текущей скоростью займет около 3 дней. Есть ли какой-либо альтернативный API, который я могу использовать в облачном потоке данных, чтобы прочитать это количество файлов из gcs с хорошей производительностью. Я использовал TextIO ранее, но это не удавалось из-за предела сериализации шаблона, который составляет 20 МБ.

1 Ответ

0 голосов
/ 11 февраля 2020

Ниже кода TextIO () проблема решена.

PCollection<String> input = p.apply("Read file from GCS",TextIO.read().from(options.getInputFile())
                        .withCompression(Compression.AUTO).withHintMatchesManyFiles()
                        );              

withHintMatchesManyFiles () решил проблему. Но все же я не знаю, пока производительность FileIO так плоха.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...