def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator")
val sc = new SparkContext(sparkConf)
val rdd1: RDD[Int] = sc.makeRDD(List(2, 4, 6, 8), 2)
// just print datas partition info then reture partition datas with no changes
val rdd2: RDD[Int] = rdd1.mapPartitionsWithIndex((par, datas) => {
println("data and partition info : par = " par " datas = " datas.mkString(" "))
datas // return datas again
})
// i think there are 2,4,6,8 four elements in rdd2
// so i foreach rdd2 but nothing output, why this happen?
rdd2.collect().foreach(println)
sc.stop()
}
我正在研究火花,我用火花寫了一個簡單的演示代碼。但有一些問題我不明白。我不知道為什么代碼rdd2.collect().foreach(println)不能列印任何東西?
uj5u.com熱心網友回復:
您的問題是您在使用mkString函式時已經遍歷的mapPartition函式中回傳了一個迭代器。迭代器是一種特殊的集合,可以幫助處理大型磁區一個一個地讀取元素。它們用于 RDD api 的不同功能,如 forEach、mapPartition、zipPartition 等。看看它們是如何作業的。并注意以下陳述句:“在呼叫迭代器方法后,永遠不應該使用迭代器。” . 洗掉println行,它應該可以作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/419711.html
標籤:
