问题:
我正在编写一个apachebeam管道来将avro文件转换为parquet文件(使用sparkrunner)。一切都很好,直到我开始转换大尺寸的avro文件(15g)。
用于读取avro文件以创建pcolletion的代码:
PCollection<GenericRecord> records =
p.apply(FileIO.match().filepattern(s3BucketUrl + inputFilePattern))
.apply(FileIO.readMatches())
.apply(AvroIO.readFilesGenericRecords(inputSchema));
我的entrypoint shell脚本中的错误消息是:
b'/app/entrypoint.sh:line 42:8终止java-xx:maxram=${max\u ram}-xx:maxramfraction=1-cp/usr/share/tink analytics avro to parquet/avro-to-parquet-deploy-task.jar
假设
经过一些调查,我怀疑上面的avroio代码试图将整个avro文件作为一个分区加载,从而导致oom问题。
我的一个假设是:如果我在读取avro文件时可以指定分区的数量,比如100个分区,那么每个分区将只包含150m的数据,这应该可以避免oom问题。
我的问题是:
这个假设是否把我引向了正确的方向?
如果是这样,那么在读取avro文件时如何指定分区数?
暂无答案!
目前还没有任何答案,快来回答吧!