2017-01-12 70 views
0

我有製表符分隔的文本文件。我只是基於數組元素的連接來提取密鑰keyBy(_(6).trim() + "pr" + _(0))。我的問題是我如何使它通用基於逗號分隔索引值,例如:我想通過逗號分隔索引(6,0)與分隔符pr,它會給出連接的關鍵。Spark RDD動態密鑰生成器

val x = rawinput.map(_.split("\t")) 
    .keyBy(_(6).trim() + "pr" + _(0)) // extract key 
    .flatMap{ case (k, arr) => arr.take(7).zipWithIndex.map((k, _)) } 

回答

1

地圖給定的指標序列匹配的數組項,並使用mkString將它們串聯:

val indices = Seq(6, 0) 
val x = rawinput.map(_.split("\t")) 
    .keyBy(arr => indices.map(arr).mkString("pr")) // extract key 
+0

謝謝@Tzach。假設我們有多個分隔符,例如:keyBy(_(6).trim()+「pr」+ _(0)+「pm」+ _(0)+「pq」+ _(1))'then我們如何處理這種情況? – Souvik

+0

你可以使用_tuples_來表示索引和分隔符,例如:'val indices = Seq((6,「pr」),(0,「pm」),(1,「」))'然後在' keyBy':'arr => indices.map {case(i,d)=> arr(i)+ d} .mkString()' –

+0

您是天才@Tzach ...感謝您的幫助。 – Souvik