Java 处理大型CSV';s正在使用数据流作业
我正在尝试使用GCP数据流作业处理6GB CSV文件(GZ中为750MB)。我使用machineType作为n1-standard-4,它是15GB内存大小,带有4vCPU 我的数据流代码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<
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]));
}
}
,
的字段如何?有足够的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的解析器替换您自己的解析器来更改代码。故事结束了。