Google cloud dataflow 如何读取大小为10+的文件;数据流中的GB?

Google cloud dataflow 如何读取大小为10+的文件;数据流中的GB?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,通过调用函数ReadableFile.readFullyAsUTF8String,尝试在数据流作业中使用apache beam FileIO读取大小为10+GB的CSV文件。而且,它的失败有以下错误 读取大小超过INTEGER.MAX_值的文件失败。请给我一些建议 at java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:123) at java.io.ByteArrayOutputStrea

通过调用函数
ReadableFile.readFullyAsUTF8String
,尝试在数据流作业中使用apache beam FileIO读取大小为10+GB的CSV文件。而且,它的失败有以下错误

读取大小超过INTEGER.MAX_值的文件失败。请给我一些建议

    at java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:123)
    at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:117)
    at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)
    at org.apache.beam.sdk.util.StreamUtils.getBytes(StreamUtils.java:64)
    at org.apache.beam.sdk.io.FileIO$ReadableFile.readFullyAsBytes(FileIO.java:419)
    at org.apache.beam.sdk.io.FileIO$ReadableFile.readFullyAsUTF8String(FileIO.java:424) ```

我相信,在大多数情况下,Dataflow runner默认使用n1-standard-1实例。这些没有那么多的记忆。您可以通过将
workerMachineType
传递给运行程序来覆盖此设置,以指定内存大于10GB的

然而,这种方法并没有充分利用使用ApacheBeam运行的并行优势。将整个文件读入内存会造成瓶颈和高内存负载,如果将读取拆分为多个片段,则可能不会遇到这种情况。您可能需要研究其他读取CSV的方法。例如,如果CSV的每一行都是一个单独的条目,则可能很有用。但是,如果出于某种原因(例如,文件被压缩),您需要同时获取整个文件内容,那么这种方法将不起作用