2015-03-03 8 views
11

İç harita fonksiyon filtreleme çalışıyorum. Temelde, klasik harita küçültmede bunu yapabilmenin yolu, filtre kriterleri karşılandığında, eşleştiricinin içeriğe bir şey yazmamasıdır. Kıvılcımla nasıl benzerlik kazanabilirim? Eşleme adımında başarısız olduğu için null işlev işlevinden döndüremiyorum. Filtre işlevini kullanabilirim ancak aynı görevi harita sırasında gerçekleştirirken gereksiz veri yineleme gibi görünüyor. Ayrıca null kukla anahtarla çıktı almayı deneyebilirim ama bu kötü bir çözümdür.kıvılcım - filtre içinde harita

rdd.flatMap:

+0

Sorunu gösteren örnek kod ekleyebilir misiniz? – maasg

cevap

13

birkaç seçenek vardır rdd.flatMap RDD içine Traversable koleksiyonunu dümdüz olacak. Öğeleri seçmek için, dönüşümün sonucu olarak genellikle bir Option döndürürsünüz.

rdd.flatMap(elem => if (filter(elem)) Some(f(elem)) else None) 

rdd.collect(pf: PartialFunction)

filtre ve orijinal RDD öğeler dönüştürmek kısmi işlevi sağlamak için olanak sağlar. Bu yöntemle tüm desen eşleştirme gücünü kullanabilirsiniz. Dekan Wampler yorumlardaki bahisler gibi

rdd.collect{case t if (cond(t)) => f(t)} 
rdd.collect{case t:GivenType => f(t)} 

, rdd.map(f(_)).filter(cond(_)) kadar iyi ve daha hızlı yukarıda bahsedilen diğer daha 'veciz' seçeneklere göre olabilir.

f, bir dönüştürme (veya harita) işlevidir.

+3

Eğer '... filter(). Map() 'işlevini kullanırsanız, MapReduce'ta" mappers "zincirleme ile benzer şekilde, her bölüm için aynı görevde çalıştırılırlar. Bu, ne kadar geçici nesnenin ayrıldığına bağlı olarak tek bir “flatMap” veya “topla” dan bile daha hızlı olabilir, daha sonra hızla toplanan çöpleri toplar. –

+0

@DeanWampler Pipellemeyi biliyordum ama 'filter(). Map() '' flatmap' ya da 'topla '' dan daha hızlı olabileceğini bilmek çok güzel ... '' map(). Filter()' yi değiştirdik 'topla()' b/c daha iyi okur, ancak mükemmel kontrol etmelidir. Teşekkürler. – maasg

+0

Teşekkürler.Şimdi, "harita zinciri" yolu beni engellemiyor. Java 8'de eşdeğer bir flatmap öneriye bakacağım, daha sonra hem kod sadeliği hem de performans için bana yararlı olduğu kanıtlanmış mükemmel – nir