Apache spark 元组的RDD和行差异的RDD

Apache spark 元组的RDD和行差异的RDD,apache-spark,Apache Spark,我有两个不同的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 => {

我有两个不同的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=x0?我怎么能用foreach做到这一点?还是我们需要在第一个案例中始终使用map?由于第二个示例中的行内部,您可以看到数据类型的差异

第一个是RDD[String,Int] 这是一个包含字符串Int的Tuple2的RDD,因此您可以通过val prod=x访问它。第一个值为String,第二个整数值为x

因为它是一个元组,您不能以val prod=x0的身份访问它

第二个是RDD[org.apache.spark.sql.Row],它可以访问 val prod=x.getString0或val prod=x0


我希望这有帮助

奇怪的是,我正准备尝试一下,但我想我以前已经尝试过了。无论如何,伟大的网站和人!