Как мне прочитать файл .csv в поток данных GCP, а затем получить счетчик для указанного столбца c и записать его в BigQuery? - PullRequest
0 голосов
/ 21 января 2020

Мне нужно прочитать CSV-файл в DataFlow, который представляет таблицу, выполнить преобразование GroupBy, чтобы получить количество элементов в указанном столбце c, а затем записать это число в таблицу BigQuery вместе с исходным file.

Пока что я получил первый шаг - чтение файла из моего хранилища и я вызвал преобразование, но я не знаю, как получить счетчик для одного столбца, так как CSV имеет 16.

public class StarterPipeline {
  private static final Logger LOG = LoggerFactory.getLogger(StarterPipeline.class);

  public static void main(String[] args) {
    Pipeline p = Pipeline.create(PipelineOptionsFactory.fromArgs(args).withValidation().create());

    PCollection<String> lines = p.apply("ReadLines", TextIO.read().from("gs://bucket/data.csv"));
    PCollection<String> grouped_lines = lines.apply(GroupByKey())

    PCollection<java.lang.Long> count = grouped_lines.apply(Count.globally())

    p.run();
  }
}

Ответы [ 2 ]

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

Было бы лучше, если бы вы преобразовали этот CSV в подходящую форму. Например: преобразовать его в TableRow и затем выполнить на основе GroupByKey. Таким образом, вы можете идентифицировать столбец, соответствующий определенному значению, и найти количество, основанное на этом.

0 голосов
/ 21 января 2020

Вы читаете целые строки из вашего CSV в PCollection на строках. Скорее всего, этого недостаточно.

Что вы хотите сделать, это

  1. Разделить всю строку на несколько строк, относящихся к столбцам
  2. Filter PCollection для значений, которые содержать что-то в нужном столбце. [1]
  3. Применить счет [2]

[1] https://beam.apache.org/releases/javadoc/2.2.0/org/apache/beam/sdk/transforms/Filter.html [2] https://beam.apache.org/releases/javadoc/2.0.0/org/apache/beam/sdk/transforms/Count.html

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