Apache spark 元组的RDD和行差异的RDD
我有两个不同的RDD,对它们都应用foreach,并注意到一个我无法解决的差异 第一个: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 => {
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
我希望这有帮助 奇怪的是,我正准备尝试一下,但我想我以前已经尝试过了。无论如何,伟大的网站和人!