СДР Tuple и СДР Row различий - PullRequest
0 голосов
/ 08 мая 2018

У меня есть два разных 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? Или нам всегда нужно использовать карту для первого случая? Из-за внутреннего ряда на втором примере?

1 Ответ

0 голосов
/ 08 мая 2018

Как вы можете видеть разницу в типах данных

Первый из них RDD[(String, Int)] Это RDD из Tuple2, который содержит (String, Int), поэтому вы можете получить доступ к этому как val prod = x._1 для первого значениякак String и x._2 для второго Integer значения.

Поскольку это кортеж, вы не можете получить к нему доступ как val prod = x(0)

, а второй - RDD[org.apache.spark.sql.Row], что можетбыть доступ к val prod = x.getString(0) или val prod = x(0)

Надеюсь, это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...