Apache Beam TextIO. Читать с номером строки - PullRequest
0 голосов
/ 06 июня 2018

Можно ли получить доступ к номерам строк со строками, считанными в PCollection из TextIO.Read?Для контекста здесь, я обрабатываю файл CSV и мне нужен доступ к номеру строки для данной строки.

Если это невозможно через TextIO. Читать кажется, что это должно быть возможно с использованием какого-либо пользовательского чтения илитрансформироваться, но у меня возникли проблемы с выяснением, с чего начать.

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете использовать FileIO для чтения файла вручную, где вы можете определить номер строки при чтении из ReadableFile.

Простое решение может выглядеть следующим образом:

p
    .apply(FileIO.match().filepattern("/file.csv"))
    .apply(FileIO.readMatches())
    .apply(FlatMapElements
            .into(strings())
            .via((FileIO.ReadableFile f) -> {
                List<String> result = new ArrayList<>();
                try (BufferedReader br = new BufferedReader(Channels.newReader(f.open(), "UTF-8"))) {
                    int lineNr = 1;
                    String line = br.readLine();
                    while (line != null) {
                        result.add(lineNr + "," + line);
                        line = br.readLine();
                        lineNr++;
                    }
                } catch (IOException e) {
                    throw new RuntimeException("Error while reading", e);
                }
                return result;
            }));

Приведенное выше решение просто добавляет номер строки к каждой строке ввода.

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