RDD map을 사용 하기전에 특정 라인(예, 첫번째 라인)을 사용하고 싶지 않다면 다음과 같은 mapPartitionWithIndex()를 사용한다.
rdd.mapPartitionsWithIndex(
(i, iterator) => if (i == 0) iterator.drop(1) else iterator)
예제는 다음과 같다.
scala> val rdd = sc.parallelize(List("samuel", "kyle", "jun", "ethan", "crizin"), 5)
rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at parallelize at <console>:24
scala> rdd.mapPartitionsWithIndex((i, iterator) => if (i == 0) iterator.drop(1) else iterator).foreach(println)
kyle
crizin
ethan
jun
scala> rdd.mapPartitionsWithIndex((i, iterator) => if (i % 2 == 0) iterator.drop(1) else iterator).foreach(println)
kyle
ethan
'scala' 카테고리의 다른 글
[sbt] dependency 추가시 %%(double percent)와 %(percent) 차이점 (0) | 2017.10.30 |
---|---|
[spark2] groupByKey를 쓰지 않도록 한다 (0) | 2017.08.10 |
[scala] Product 이해하기 (0) | 2017.08.10 |
[spark] [펌질] wide dependecy, narrow dependency (0) | 2017.08.08 |
[spark2] partitonBy, HashPartitioner, RangePartitioner 예제 (0) | 2017.08.07 |