首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元组RDD与行差RDD

元组RDD与行差RDD
EN

Stack Overflow用户
提问于 2018-05-08 12:43:57
回答 1查看 830关注 0票数 0

我有两个不同的RDD,并对它们应用了一个前景,并注意到一个我无法解决的差异。

第一项:

代码语言:javascript
复制
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

从这个意义上讲,效果很好。

第二项:

代码语言:javascript
复制
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 = x(0)?我怎么能用前额做这件事?或者,对于第一种情况,我们总是需要使用map吗?因为第二个例子的行内件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-08 12:50:26

如您所见,数据类型的差异

第一个是RDD[(String, Int)],这是一个RDD of Tuple2,它包含(String, Int),所以您可以以val prod = x._1的形式访问第一个值,作为String访问x._2,对于第二个Integer值,可以以x._2的形式访问。

因为它是一个元组,所以不能以val prod = x(0)的形式访问

第二个是RDD[org.apache.spark.sql.Row],它可以访问val prod = x.getString(0)val prod = x(0)

我希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50233956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档