sop*_*hie 6 scala apache-spark
如果我有一个文件,我每行都有一个RDD zipWithIndex,
([row1, id1001, name, address], 0)
([row2, id1001, name, address], 1)
...
([row100000, id1001, name, address], 100000)
Run Code Online (Sandbox Code Playgroud)
如果我重新加载文件,我能获得相同的索引顺序吗?由于它并行运行,其他行可能会以不同方式划分?
RDD可以对s进行排序,也可以进行排序.此订单用于创建索引.zipWithIndex().
每次获得相同的订单取决于之前的调用在您的程序中执行的操作.文档提到.groupBy()可以破坏秩序或产生不同的排序.可能还有其他调用也可以执行此操作.
我想你可以随时拨打.sortBy()呼叫之前.zipWithIndex(),如果你需要保证一个特定的顺序.
这解释在 .zipWithIndex() scala API docs
public RDD<scala.Tuple2<T,Object>> zipWithIndex()用它的元素索引来拉开这个RDD.排序首先基于分区索引,然后是每个分区内的项目顺序.因此,第一个分区中的第一个项目获得索引0,最后一个分区中的最后一个项目获得最大索引.这类似于Scala的zipWithIndex,但它使用Long而不是Int作为索引类型.当此RDD包含多个分区时,此方法需要触发spark作业.请注意,某些RDD(例如groupBy()返回的RDD)不保证分区中元素的顺序.因此,不保证分配给每个元素的索引,如果重新评估RDD,甚至可能会改变.如果需要固定排序来保证相同的索引分配,则应使用sortByKey()对RDD进行排序或将其保存到文件中.