Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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

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
Java 处理大型CSV';s正在使用数据流作业_Java_Google Cloud Platform_Google Bigquery_Google Cloud Dataflow - Fatal编程技术网

Java 处理大型CSV';s正在使用数据流作业

Java 处理大型CSV';s正在使用数据流作业,java,google-cloud-platform,google-bigquery,google-cloud-dataflow,Java,Google Cloud Platform,Google Bigquery,Google Cloud Dataflow,我正在尝试使用GCP数据流作业处理6GB CSV文件(GZ中为750MB)。我使用machineType作为n1-standard-4,它是15GB内存大小,带有4vCPU 我的数据流代码 PCollection<TableRow> tableRow = lines.apply("ToTableRow", ParDo.of(new StringToRowConverter())); static class StringToRowConverter extends DoFn<

我正在尝试使用GCP数据流作业处理6GB CSV文件(GZ中为750MB)。我使用machineType作为n1-standard-4,它是15GB内存大小,带有4vCPU

我的数据流代码

PCollection<TableRow> tableRow = lines.apply("ToTableRow", ParDo.of(new 
StringToRowConverter()));

static class StringToRowConverter extends DoFn<String, TableRow> {
    private static final long serialVersionUID = 1L;
    @ProcessElement
    public void processElement(ProcessContext c) {
        String inputLine = c.element();
        String[] split = inputLine.split(",");
        TableRow output = new TableRow();
       c.output(new TableRow().set("id", split[0]).set("apppackage", split[1]));
         }
}
PCollection tableRow=行。应用(“ToTableRow”,第页,共页(新)
StringToRowConverter());
静态类StringToRowConverter扩展了DoFn{
私有静态最终长serialVersionUID=1L;
@过程元素
公共void processElement(ProcessContext c){
字符串inputLine=c.element();
String[]split=inputLine.split(“,”);
TableRow输出=新建TableRow();
c、 输出(new TableRow().set(“id”,拆分[0]).set(“apppackage”,拆分[1]));
}
}
  • 我的作业已运行了2个小时,但仍未处理
  • 一旦我手动将这个大文件分解成小部分,它就会正常工作
  • 我必须处理400GB的压缩文件才能放入bigquery。所有压缩文件都在GCP存储中
  • 我的问题是,如果在这么长的时间内只处理6GB的文件,我如何处理400GB的压缩文件

    是否有办法优化此过程,以便能够在我的BQ中插入此数据。

    6GB的CSV数据不多。CSV只是一种非常低效的数字数据存储方式,对于类似字符串的数据,它仍然会带来巨大的开销,很难解析,并且不可能在静止状态下找到特定位置(需要先解析)。因此,我们可以非常乐观地认为,从数据上看,这将切实可行。这是一个重要的问题

    不要使用自己的解析器。例如:文本中包含
    的字段如何?有足够的CSV解析器

    你说你想把这些数据输入到你的BigQuery中,那么就按照谷歌的方式去做吧:


    因为bigquery已经有了自己的支持CSV的构建器。

    这就是我的CSV文件如何包含数据“1”、“com.something”、“myfile”、“7.16.0.507”、“1”、“12/1/2016 0:00”、“9ab436f4796b344”、“a”、“b”。另一件事是,我必须只从CSV中提取已处理的数据,而不是所有字段,因此我使用了pCollection数据流API。建议对当前代码进行修改吗?您建议如何解析此文件?我在回答中回答:不要自己解析,使用谷歌的csv生成器,然后过滤读取的数据。或者至少使用另一个广泛使用的解析器,而不是您自己编写的。您可以建议更改上述代码以使用现有的解析器吗?是的。读我的答案。通过用Google的解析器替换您自己的解析器来更改代码。故事结束了。