2017-01-12 49 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