У меня есть два разных RDD, и я применяю foreach к ним обоим и отмечаю разницу, которую не могу устранить.
Первый:
val data = Array(("CORN",6), ("WHEAT",3),("CORN",4),("SOYA",4),("CORN",1),("PALM",2),("BEANS",9),("MAIZE",8),("WHEAT",2),("PALM",10))
val rdd = sc.parallelize(data,3) // NOT sorted
rdd.foreach{ x => {
println (x)
}}
rdd: org.apache.spark.rdd.RDD[(String, Int)] = ParallelCollectionRDD[103] at parallelize at command-325897530726166:8
Работает нормально в этом смысле.
Второй:
rddX.foreach{ x => {
val prod = x(0)
val vol = x(1)
val prt = counter
val cnt = counter * 100
println(prt,cnt,prod,vol)
}}
rddX: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = MapPartitionsRDD[128] at rdd at command-686855653277634:51
Работает нормально.
Вопрос: почему я не могу сделать val prod = x (0) , как во втором случае на первом примере? И как я мог сделать это с foreach? Или нам всегда нужно использовать карту для первого случая? Из-за внутреннего ряда на втором примере?