2016-03-26 17 views
0

İki dosyam var, bir özet (csv dosyasından ayıklanan çok sayıda satır içeriyor) ve diğer sözcük listesi (csv dosyasında satır). Ben iki dosyayı okumak ve her biri için Array [Dize] var: summary her hattı içinKelime-Sözlük Hattı-Satırından sözcükleri ayıkla

val summary: Array[String] = ... 
val wordList: Array[String] = ... 

, ben,

Numune verileri de wordList mevcut kelimelerin listesini çıkarmak istiyorum summary içinde:

hi how are you 
I am good.how about you. 
I would like to have tea. 

Örnek veri wordList içinde:

good 
tea 
you 
like 

Beklenen sonuç:

import scala.collection.mutable.ArrayBuffer 

val results = summary.map(l => { 
    var result = ArrayBuffer[String](); 
    wordList.foreach(w => {if (l.contains(w)) result.append(w)}); 
    result.toArray.mkString(",") 
}).filter(l => l.length > 0) 
+0

Neden csv'yi doğrudan bir veri çerçevesine aktarmıyor musunuz? https://github.com/databricks/spark-csv – ulrich

+1

Bu açıkça bir ödevdir. Ne denediğini ve tam olarak nerede sıkıştığını göstersen en iyisi olur. Ayrıca, bunu Spark ile etiketlediniz ama Diziler var - bunlar gerçekten RDD'ler mi? –

+1

Aynı zamanda, cevap verdiğimi unuttuğum biri de dahil olmak üzere birçok başka sorunun kopyası… –

cevap

0

olarak, Spark gerekmez. Kodunuzu denediğimde, RDD'nin RDD içeremeyeceğini söyleyen bir hata verdi. Bu yüzden kodunuzu, yayın listesini yayınlayarak ve ardından koddaki yayınlanmış değişkeni kullanarak değiştirdiniz. i tüm satırları, hatta boş satır (eşleşen orada) istediğim için

val broadcast_wordList=sc.broadcast(wordList) 

val results = summary_arraylist.map {l=> 
val result = ArrayBuffer[String](); 
broadcast_wordList.value.foreach(w=> {if(l.contains(w)) result.append(w)}); 
result.toArray.mkString(",") 
} 

, bu yüzden kodundan "filtresi" kaldırıldı. Ama yine de, çıktı olarak boş diziler alıyorum.

enter image description here: Burada

çıkıştır.

+0

Sadece boş bir dizi alıyorum :(lütfen yardım –

-1

@ David Griffin: Birisi işaret

you 
good,you 
like,tea 
0

İşte son cevabı, ben anladım:

val broadcast_wordList = sc.broadcast (wordlist)

def concat (ss: String *) = ss filtresi (_.nonEmpty) mkString", "

val results_part1 = summary_arraylist. yeniden bölme (1) .map {l =>

var t = broadcast_wordList.value.map (ağırlık => halinde (l.contains()) ağırlık {a} başka { ""})

baskı (l)

var tt = t.filter (ll => ll.length> 0) .toArray.mkString ("|")

concat (l, tt)

}