Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在apache spark scala中访问数组RDD的特定元素_Scala_Apache Spark_Bigdata - Fatal编程技术网

在apache spark scala中访问数组RDD的特定元素

在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

我有一个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)]=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)