ORC是一个文件,它并没有按照记录的编写顺序提供记录



我最近开始使用ORC文件在磁盘上保存一些记录。我使用保存模式追加在ORC文件中批量写入记录。

但当从同一个ORC文件中读取记录时,我得到的记录顺序不同。

下面是我正在使用的一个小代码示例。

写入记录-

private void serializeRowList(List<Object[]> rowsToCache, int chunkNumber) throws Exception
{
try
{
String orcCompatibleLocalPath = "some_path";    
sqlContext.createDataFrame(ScalaUtils.convertObjectArrayListToRddOfRows(rowsToCache), schema).write().mode(SaveMode.Append).format("orc").save(orcCompatibleLocalPath);
}
catch (Exception e)
{
}
}

我保存到ORC文件的行是分块的,它们将被附加在同一个文件中。

现在我正在以以下方式读取相同的文件:-

RDD<Row> rows = sqlContext.read().format("orc").load(orcCompatibleLocalPath).rdd();

现在我在RDD中得到了多个分区,尽管我没有应用任何分区,并且保存的ORC文件大小远小于hdfs默认块大小。

此外,当使用以下代码获取本地迭代器时-

rowIterator = rdd.toLocalIterator();

我得到的记录的顺序与保存它们的顺序不同。

我需要帮助来确定我在这里做错了什么。

这是正常行为:

  • 在一般情况下,Spark不保证特定的订单
  • Append模式不追加到文件,而是追加到目录
  • Spark SQL数据soruces不再依赖Hadoop配置来确定输入拆分

相关内容

  • 没有找到相关文章

最新更新