Google cloud dataflow 如何在java中使用google cloud dataflow从云存储读取数据时跳过csv文件中的回车

Google cloud dataflow 如何在java中使用google cloud dataflow从云存储读取数据时跳过csv文件中的回车,google-cloud-dataflow,google-data-api,Google Cloud Dataflow,Google Data Api,我有一个CSV文件,每行包含新的回车(\n)。 使用Apache beam的TextIO.read函数从云存储读取CSV文件时,它将\n视为新记录。我怎样才能克服这个问题 我尝试过扩展filebasedsource,但当我们应用pTransorms时,它只读取CSV文件的第一行 我们将不胜感激 提前感谢TextIO无法做到这一点-它总是基于回车分割输入,并且不知道某些回车的CSV特定报价 但是,Beam 2.2包含一个转换,使您能够轻松地自己编写特定于CSV(或任何其他特定于文件格式的读取)的代

我有一个CSV文件,每行包含新的回车(\n)。 使用Apache beam的TextIO.read函数从云存储读取CSV文件时,它将\n视为新记录。我怎样才能克服这个问题

我尝试过扩展filebasedsource,但当我们应用pTransorms时,它只读取CSV文件的第一行

我们将不胜感激


提前感谢

TextIO
无法做到这一点-它总是基于回车分割输入,并且不知道某些回车的CSV特定报价

但是,Beam 2.2包含一个转换,使您能够轻松地自己编写特定于CSV(或任何其他特定于文件格式的读取)的代码:
FileIO
。这样做:

p.apply(FileIO.match().filepattern("gs://..."))
 .apply(FileIO.readMatches())
 .apply(ParDo.of(new DoFn<ReadableFile, TableRow>() {
   @ProcessElement
   public void process(ProcessContext c) throws IOException {
     try (InputStream is = Channels.newInputStream(c.element().open())) {
       // ... Use your favorite Java CSV library ...
       ... c.output(next csv record) ...
     }
   }
 }))
p.apply(FileIO.match().filepattern(“gs:/…”)
.apply(FileIO.readMatches())
.适用(新DoFn()的第{
@过程元素
公共void进程(ProcessContext c)引发IOException{
try(InputStream is=Channels.newInputStream(c.element().open())){
//…使用您最喜欢的Java CSV库。。。
…c.输出(下一个csv记录)。。。
}
}
}))

展示您迄今为止所做的尝试。我很难理解您所说的“新回车”是什么意思。你能给我一个你的文件样本吗?嗨,pablo,我的CSV中的一个单元格包含这样的数据:“这32个已确认的57个特权帐户不符合密码策略,这个数字是指示的”,因此它将“这个数字是指示的”作为下一行。由于拆分后的并行处理记录与tooHI Klutt不相邻,因此我尝试了使用此TextIO.read().from(“gs://*************”),甚至尝试了MySource source=new MySource(“gs://****************”,2048,0,6);PCollection out=p.apply(“ReadFileData”,Read.from(source)).apply(ParDo.of(new-RiskPercentageRowSplitter());但这两种方法在cellHi Jkff内出现新线路的情况下都没有帮助,谢谢您的回复。如果我们从2.1.0迁移到2.2.0,如何设置DataflowPipelineOptions=PipelineOptions工厂.as(DataflowPipelineOptions.class);以及如何设置项目id和需要设置的运行程序如果我需要以与2.1.0相同的方式运行locallySame,这是一个向后兼容的版本,您现有的所有代码都应该继续工作。嗨,jkff,谢谢。它无法读取:索引2处的文件模式非法字符:gs://bucketname/objectnameDataflowPipelineOptions无法读取2.2中的内容。如果我的pom.xmlhi jkff中同时具有依赖项2.1和2.2,我添加了以下依赖项org.apache.beam beam sdks java core 2.2.0 org.apache.beam beam runners direct java 2.2.0运行时,但添加后无法检测DataFlowpipelineOptions并在索引2处获取非法字符:gs://bucketname/objectname。请给我一些建议