2017-06-12 67 views
0

识别一个分区:火花mapPartitionsWithIndex:识别一个分区

mapPartitionsWithIndex(index, iter) 

的方法,结果为驱动功能到每个分区。我知道我们可以使用“index”参数来跟踪分区。

许多示例都使用此方法使用“index = 0”条件删除数据集中的标题。但是我们如何确保读取的第一个分区(翻译“index”参数等于0)确实是标题。它是随机的或基于分区器(如果使用的话)。

+0

你能指点我们其中的一个数字例子吗? – hadooper

回答

2

Isint它是随机的或基于分区器(如果使用的话)。 ?它不是随机的,但是分区号码。你可以在它下面简单的例子

val base = sc.parallelize(1 to 100, 4)  
base.mapPartitionsWithIndex((index, iterator) => { 

    iterator.map { x => (index, x) } 

}).foreach { x => println(x) } 

结果:(0,1)(1,26)(2.51)(1.27)(0,2)(0,3)( 0,4)(1,28)(2,52) (1,29)(0,5)(1,30)(1,31)(2,53)(1,32)(0,6) ......

+0

据我所知,从1到25的数字在一个分区中,索引等于0. 我的问题是,这是一个保证,前25个数字组合在一起,他们也进入分区(0)。 @bdr –

+0

这取决于您的数据如何分区。在我的例子中,它的数字是100/4。但在字符串的情况下,然后散列分区程序。底线取决于你的分区器。如果配对RDD,默认分区程序是哈希分区程序。 – BDR

+0

因此,除非实施/另有说明,否则假设'index = 0' 将是第一行。 @BDR –