Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 如何将.csv文件读入GCP数据流,然后获取特定列的计数并将其写入BigQuery?_Google Cloud Platform_Google Bigquery_Google Cloud Dataflow_Pipeline_Apache Beam - Fatal编程技术网

Google cloud platform 如何将.csv文件读入GCP数据流,然后获取特定列的计数并将其写入BigQuery?

Google cloud platform 如何将.csv文件读入GCP数据流,然后获取特定列的计数并将其写入BigQuery?,google-cloud-platform,google-bigquery,google-cloud-dataflow,pipeline,apache-beam,Google Cloud Platform,Google Bigquery,Google Cloud Dataflow,Pipeline,Apache Beam,我需要将csv文件读入表示表的数据流,执行GroupBy转换以获得特定列中的元素数,然后将该数与原始文件一起写入BigQuery表 到目前为止,我已经完成了第一步——从我的存储桶中读取文件,并调用了转换,但我不知道如何获取单个列的计数,因为csv有16个 public class StarterPipeline { private static final Logger LOG = LoggerFactory.getLogger(StarterPipeline.class); publ

我需要将csv文件读入表示表的数据流,执行GroupBy转换以获得特定列中的元素数,然后将该数与原始文件一起写入BigQuery表

到目前为止,我已经完成了第一步——从我的存储桶中读取文件,并调用了转换,但我不知道如何获取单个列的计数,因为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();
  }
}
公共类启动程序管道{
私有静态最终记录器LOG=LoggerFactory.getLogger(StarterPipeline.class);
公共静态void main(字符串[]args){
Pipeline p=Pipeline.create(PipelineOptionsFactory.fromArgs(args).withValidation().create());
PCollection lines=p.apply(“ReadLines”,TextIO.read()。from(“gs://bucket/data.csv”);
PCollection grouped_line=行。应用(GroupByKey())
PCollection count=分组的_行。应用(count.globally())
p、 run();
}
}

您正在将整行内容从CSV读取到字符串上的PCollection。这很可能对你来说还不够

你想做的是

  • 将整个字符串拆分为与列相关的多个字符串
  • 将PCollection筛选为在必需列中包含内容的值。[1]
  • 应用计数[2]
  • [1]
    [2]

    如果您将csv转换为合适的格式,效果会更好。例如:将其转换为TableRow,然后执行基于GroupByKey的操作。通过这种方式,您可以识别对应于特定值的列,并在此基础上查找计数。

    您可以更好地指定要执行的计数吗?另一种方法是将文件按原样写入BigQuery,然后只编写一条SQL语句以获取计数并将其保存为表。比编写
    GroupBy
    等要容易得多。您是否必须将数据流用于所有事情?@GrahamPolley伟大的替代方案。此外,您是否知道您在分组中按键使用的键?我建议您拆分您的CSV线路并构建一个KV元素,使用您想要的键,V线。