2015-01-30 24 views
11

RDD içindeki listeyi düzleştirmek mümkün mü? Örneğin dönüştürmek:RDD içinde liste nasıl düzleştirilir?

val xxx: org.apache.spark.rdd.RDD[List[Foo]] 

için:

val yyy: org.apache.spark.rdd.RDD[Foo] 

Bu nasıl yapmalı?

cevap

12
val rdd = sc.parallelize(Array(List(1,2,3), List(4,5,6), List(7,8,9), List(10, 11, 12))) 
// org.apache.spark.rdd.RDD[List[Int]] = ParallelCollectionRDD ... 

val rddi = rdd.flatMap(list => list) 
// rddi: org.apache.spark.rdd.RDD[Int] = FlatMappedRDD ... 

// which is same as rdd.flatMap(identity) 
// identity is a method defined in Predef object. 
// def identity[A](x: A): A 

rddi.collect() 
// res2: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) 
11

Sadece bunu düzleştirmek gerekiyor ama RDD üzerinde hiçbir açık 'düzleştirmek' yöntemi var gibi, sen bunu yapabilirsiniz: Bütün cevapları ile anlaşmak

rdd.flatMap(identity) 
+0

teşekkürler. Bu durumda ne “rdd” ve “kimlik” nedir? Cevabınız sorudaki bir örneğe nasıl dönüşüyor? – zork

+0

@zork, sorudaki xxx.flatMap (kimlik) olacaktır. “kimlik”, dediği gibi kimlik fonksiyonu olan önceden tanımlanmış bir işlevdir. Muhtemelen zaten bunu zaten biliyorsunuzdur. –

-1

, ancak düşünebilirsiniz Mevcut bir koleksiyondan yeni bir koleksiyon oluşturulmadığı sürece + => "flatten" yöntemi. Düzleştirdiğinizde, koleksiyonunuz aynı kalır.

rdd.flatten

İlgili konular