Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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/0/backbone.js/2.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 上传到谷歌云存储时,输出数据以随机顺序出现_Java_Google Cloud Storage_Google Cloud Platform_Google Cloud Dataflow - Fatal编程技术网

Java 上传到谷歌云存储时,输出数据以随机顺序出现

Java 上传到谷歌云存储时,输出数据以随机顺序出现,java,google-cloud-storage,google-cloud-platform,google-cloud-dataflow,Java,Google Cloud Storage,Google Cloud Platform,Google Cloud Dataflow,我一直在使用谷歌数据流sdk将CSV文件上传到谷歌云存储。 当我将文件上传到谷歌云项目时,我的数据以随机顺序出现在一个文件中。csv上的每一行都是正确的,但各行都是正确的 csv的标题(即属性、属性、属性)始终位于另一行上,且从不位于应位于的顶部。我再次强调,每列中的数据都很好,只是随机定位的行 以下是最初读取数据的代码: PCollection csvData=pipeline.applyTextIO.Read.nameItems .fromfilename; 这是写入谷歌云项目的代码: cs

我一直在使用谷歌数据流sdk将CSV文件上传到谷歌云存储。 当我将文件上传到谷歌云项目时,我的数据以随机顺序出现在一个文件中。csv上的每一行都是正确的,但各行都是正确的

csv的标题(即属性、属性、属性)始终位于另一行上,且从不位于应位于的顶部。我再次强调,每列中的数据都很好,只是随机定位的行

以下是最初读取数据的代码:

PCollection csvData=pipeline.applyTextIO.Read.nameItems .fromfilename; 这是写入谷歌云项目的代码:

csvData.applyTextIO.Write.namedWriteToCloud .togs://dbm-poc/+partnerId+/+dateOfReport+modifiedFileName .withSuffix.csv;
感谢您的帮助。

首先,要修复标题,请使用:

public static TextIO.Write.Bound<String> withHeader(@Nullable String header)
例如:

...
TextIO.Write.withHeader("<header>").apply(..)
...

其次,数据流目前不支持对接收器的有序/排序写入。这很可能是由于其分布式/并行体系结构。如果你真的想写的话,你可以写你自己的定制水槽。有关更多详细信息,请参见类似问题。

虽然我同意格雷厄姆·波利提供的答案是正确的,但我还是设法找到了一种更简单的方法,让数据按顺序写入

相反,我使用google云存储库将我需要的文件存储到云上,如下所示:

公共静态字符串writeFilebyte[]内容、字符串文件名、字符串partnerId、字符串dateOfReport{ Storage Storage=StorageOptions.defaultInstance.service; BlobId BlobId=BlobId.ofdbm-poc,partnerId+/+dateOfReport+-+filename+.csv; BlobInfo BlobInfo=BlobInfo.builderbloid.contentTypebinary/octet-stream.build; storage.createblobInfo,内容; 返回文件名; } 公共静态字节[]readFileString文件名引发IOException{ return Files.readAllBytesPath.getfilename; } 通过将这两种方法结合使用,我不仅能够将文件上传到我想要的bucket,而不会丢失任何内容顺序,而且还能够将上传文件的格式从文本更改为二进制/八位字节流文件,这意味着可以访问和下载


这种方法似乎也消除了使用管道上传数据的需要。

是的,我决定不使用它。我不确定是否有更简单的选择