我最近开始使用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();
现在,即使我没有应用任何分区,并且在保存的ORC文件大小比hdfs默认块大小小得多的情况下,我仍在RDD中获得多个分区。
此外,通过使用以下代码获取本地迭代器时-
rowIterator = rdd.toLocalIterator();
我得到的记录的顺序与保存顺序不同。
我需要帮助来确定我在这里做错了。
答案 0 :(得分:0)
这是正常行为:
Append
模式不会附加到文件,而是附加到目录。