Spark在读取有序文件时是否保留记录顺序?

时间:2017-08-22 15:55:56

标签: apache-spark

我使用Spark读取记录(在本例中为csv文件)并处理它们。这些文件已按某种顺序排列,但此顺序并未被任何列反映(将其视为时间序列,但没有任何时间戳列 - 每行只是文件中的相对顺序)。我想在我的Spark处理中使用这个排序信息,比如将行与前一行进行比较。我无法明确订购记录,因为没有订购栏。

Spark是否维护从文件中读取的记录顺序?或者,有没有办法从Spark访问记录的文件顺序?

2 个答案:

答案 0 :(得分:8)

是的,当从文件中读取时,Spark维护记录的顺序。但是当发生改组时,订单不会被保留。因此,为了保留顺序,您需要编程以便不在数据中进行混洗或创建seq。数字到记录并使用那些seq。处理时的数字。

在像Spark这样的分发框架中,数据被分配到集群中以进行快速处理,肯定会发生数据的混乱。因此,最佳解决方案是为每行创建一个序列号,并使用该序号进行排序。

答案 1 :(得分:4)

数据洗牌时不保留订单。但是,您可以在进行计算之前枚举行。如果您使用的是RDD,则会有一个名为zipWithIndexRDD[T] => RDD[(T, Long)])的函数,它正是您正在搜索的内容。