Apache梁管道Java:记录未按顺序写入目标文件

Posted

技术标签:

【中文标题】Apache梁管道Java:记录未按顺序写入目标文件【英文标题】:Apache beam pipeline Java : Records not writing to the destination file in sequential order 【发布时间】:2021-07-26 18:08:55 【问题描述】:

我正在使用 Apache Beam 管道将 csv 文件从一个容器传输到 Azure 存储中的另一个容器,并且能够成功传输文件,但目标文件中的记录不是按顺序排列的。下面是我用来传输文件的代码。

String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern("YYYY_MM_DD_HH_MM_SS3")).toString();

String connectionString = "<<AZURE_STORAGE_CONNECTION_STRING>>"; 
        
PipelineOptions options = PipelineOptionsFactory.create();
options.as(BlobstoreOptions.class).setAzureConnectionString(connectionString);
        
Pipeline p = Pipeline.create(options);
p.apply(TextIO.read().from("azfs://storageaccountname/containername/CSVSample.csv"))
.apply("",FileIO.<String>write().to("azfs://storageaccountname/containername/"+format+"/").withNumShards(1).withSuffix(".csv")
        .via(TextIO.sink()));
p.run().waitUntilFinish();

【问题讨论】:

【参考方案1】:

Beam PCollection 没有排序。如果您需要排序,您可以group by a key(在其中强制排序)并对值集进行排序,将其作为包含换行符的单个字符串元素发出。

【讨论】:

以上是关于Apache梁管道Java:记录未按顺序写入目标文件的主要内容,如果未能解决你的问题,请参考以下文章

在 apache 梁管道 Python 中跳过步骤

Apache Beam 数据流:从 Azure 到 GCS 的文件传输

Apache Beam:将具有对象列表的对象转换为多个 TableRows 以写入 BigQuery

Java:语句未按顺序执行

JAVA学习记录————JAVA中的IO

Spark SQL - 按顺序或管道读取和写入?