我想出了如何使用Spark 2.x将Snappy文件中的整个数据读入数据集,然后将该数据写入ORC格式(参见Java: Read JSON from a file, convert to ORC and write to a file)。
然而,我处理的Snappy文件非常大(500MB-1GB)并且导致我对OOM的火花过程。
我正在寻找一种方法来流式传输或分页Snappy数据,并将其以较小的块写入ORC。
我尝试使用
Dataset<Row> events = sparkSession.readStream()
.options(inputConfig.getProperties())
.format("json")
.schema(mySchema)
.load(inputPath);
StreamingQuery frameWriter = events.selectExpr(JavaConversions.asScalaBuffer(outputSchema.getColumns())).writeStream()
.format("orc")
.option("compress", "zlib")
.option("format", "append")
.option("path", outputPath)
.start();
但是,上面没有产生任何ORC文件,大概是因为从Snappy文件中读取的内容实际上不是流式传输,所以在这里使用readStream / writeStream可能并不合适。但是,也许有一种方法可以将Snappy文件中的读取作为流来公开?
或者我应该使用&#34;选择*偏移X限制Y&#34;我从Snappy文件中读取的分页数据的方法?
谢谢, 艾力