2017-01-28 7 views
1

私はキーと値のペアの配列を含むRDDを持っています。私はキーで要素を取得したい(例えば4)。apache-sparkスケーラの配列RDDの特定の要素へのアクセス

scala> val a = sc.parallelize(List("dog","tiger","lion","cat","spider","eagle"),2) 
a: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at parallelize at <console>:27 
scala> val b = a.keyBy(_.length) 
b: org.apache.spark.rdd.RDD[(Int, String)] = MapPartitionsRDD[1] at keyBy at <console>:29 

フィルタを適用しようとしましたが、エラーが発生しました。

Iは、データが常にキーの配列の形で来ている Array((4,lion))

としてキー、特定のキー(例えば4)と値のペアを印刷する

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); 

、値ペア

答えて

1

使用p(0)の代わりにp._1

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)) 
+0

これは機能しています。私はあなたが私がapache sparkを初めて使ったので、あなたがした解決策を理解することができません。これを啓発していただけますか? –

+0

では、 '_'でタプル要素にアクセスすることができます。ここで 'kvRdd'はタプルの' RDD'です。 [tuples](https://www.tutorialspoint.com/scala/scala_tuples.htm) – mrsrinivas

1

直接この機能を提供していますキーと値のペアのRDDS(タイプRDD[(K,V)]のRDDS)に適用lookup方法があります。

b.lookup(4) 
// res4: Seq[String] = WrappedArray(lion) 

b.lookup(5) 
// res6: Seq[String] = WrappedArray(tiger, eagle) 
関連する問題