2016-04-11 14 views
1

Spark için yeni bir soruyum ve aşağıdaki sorun beni bir süredir rahatsız ediyor., anahtar ve RDD değerleri listesi olan grupByKey RDD'nin çıktısını nasıl işleyebiliriz [K, Liste [v]]

Giriş dosyam virgülle ayrılmış bir dosyadır ve Anahtar olarak sakla ve değerlerin listesi olarak RDD'yi oluşturdu. Bir anahtar (benim durum ürünüm) birden fazla değere sahip olabilir. GroupByKey kullanarak RDD'yi gruplandırdım. Aynı anahtara giren tüm promosyonları getirmek için benim problemimi çözer. Buna kadar her şey yolunda. Şimdi, anahtarımın (mağazanın) belirli bir promosyona sahip olup olmadığını öğrenmek için her bir anahtarın değeri listesinde yinelemek istiyorum. anahtarım terfiyi bulursanız o zaman için bilmek istiyordu

yukarıdaki listede dayalı
val firstRDD = sc.textFile(".....") 
val secondRDD = firstRDD.map(line=>line.split(",")(0),line.split(",")(1)) 
val thirdRDD = secondRDD.groupByKey() 

(1,(aaa,bbb,ccc,ddd)) 
(2,(aaa,ccc)) 
(3,(ddd,aaa)) 

mağazada (anahtar) ve tanıtım (değer) ile rekor yazma anahtar 1 değer aaa yok veya değilse bbb olup olmadığı aaa Var ya da değil .. Spark Scala'da bunu nasıl yapabilirim.

+0

Harita kullanmadan önce bunu temel bir Scala işlemi olarak düşünün. Eğer bir tupliniz varsa, istediğiniz şeyi almak için nasıl işleyebilirdiniz? – eliasah

cevap

0

RDD'niz Tuple2 türünde olduğundan, PairRDD işlevini kullanabilirsiniz. Bu, RDD'lerin "arama" işlevine erişebileceğiniz anlamına gelir. 1aaa ilgili bir değerini olup olmadığını görmek için, en kolay yolu muhtemelen bunun için thirdRDD aksine secondRDD kullanımı daha kolay olduğunu

secondRDD.lookup(1).contains("aaa") 

Not olurdu.

+0

Yardımlarınız için teşekkürler ... örneğimde, secondRDD anahtarım tüm değerlerin kendisine ait olmayacak. Sadece groupByKey() 'den sonra, o anahtarın değer listesini alacağım. – Rahul

+0

val purchaseRDD \t = sc.textFile ("sales.txt") val purchaseRDDMap = purchaseRDD.map {alım => val alanları = purchase.split ("") \t \t \t \t \t \t val purchaseKey = alanlar (0) \t \t \t \t \t \t val purchaseValue = alanlar (2) .toDouble \t \t \t \t \t (purchaseKey, purchaseValue) \t \t 0 i kadar saplanıp bundan sonra\t} \t \t \t \t .groupByKey() \t \t \t \t .map (satın alma => (purchase._1, (purchase._2 *** – Rahul

İlgili konular