2017-01-12 4 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. Предположим, что у нас есть несколько разделителей, для Ex: '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

Смежные вопросы