在apache spark scala中访问数组RDD的特定元素
我有一个RDD,它包含一个键值对数组。我想得到一个键为4的元素在apache spark scala中访问数组RDD的特定元素,scala,apache-spark,bigdata,Scala,Apache Spark,Bigdata,我有一个RDD,它包含一个键值对数组。我想得到一个键为4的元素 scala>val a=sc.parallelize(列表(“狗”、“老虎”、“狮子”、“猫”、“蜘蛛”、“鹰”),2) a:org.apache.spark.rdd.rdd[String]=ParallelCollectionRDD[0]位于parallelize at:27 scala>val b=a.keyBy(u.length) b:org.apache.spark.rdd.rdd[(Int,String)]=MapPart
scala>val a=sc.parallelize(列表(“狗”、“老虎”、“狮子”、“猫”、“蜘蛛”、“鹰”),2)
a:org.apache.spark.rdd.rdd[String]=ParallelCollectionRDD[0]位于parallelize at:27
scala>val b=a.keyBy(u.length)
b:org.apache.spark.rdd.rdd[(Int,String)]=MapPartitionsRDD[1]位于keyBy at:29
我试图对其应用过滤器,但出现错误
scala> val c = b.filter(p => p(0) = 4);
<console>:31: error: value update is not a member of (Int, String)
val c = b.filter(p => p(0) = 4);
scala>valc=b.filter(p=>p(0)=4);
:31:错误:值更新不是(Int,String)的成员
valc=b.filter(p=>p(0)=4);
我想将带有特定键(比如4)的键、值对打印为Array((4,lion))
数据总是以键值对数组的形式出现使用
p._1
而不是p(0)
有一种方法适用于键值对的RDD(类型为RDD[(K,V)]
)直接提供此功能
b.lookup(4)
// res4: Seq[String] = WrappedArray(lion)
b.lookup(5)
// res6: Seq[String] = WrappedArray(tiger, eagle)
它正在工作。我无法理解您所做的解决方案,因为我是apache spark的新手。你能解释一下吗?你只能用
访问元组元素。这里的kvRdd
是元组的RDD
。好帖子,但它能回答问题吗?
val rdd = sc.parallelize(List("dog", "tiger", "lion", "cat", "spider", "eagle"), 1)
val kvRdd: RDD[(Int, String)] = rdd.keyBy(_.length)
val filterRdd: RDD[(Int, String)] = kvRdd.filter(p => p._1 == 4)
//display rdd
println(filterRdd.collect().toList)
List((4,lion))
b.lookup(4)
// res4: Seq[String] = WrappedArray(lion)
b.lookup(5)
// res6: Seq[String] = WrappedArray(tiger, eagle)