2016-03-15 2 views
2

мне нужно объединить список в набор из RDD, но я застрял делать это в Scala:Scala - объединить список для отображения

var accounts = set("name" -> "", "id" -> 0, ....) 

//Split the RDD into lines and split each line by `|` to get the values 
stream.foreachRDD {_.map(_._2).flatMap(_.split("|")).foreach(f => /*merge here ?*/)} 

Как связать значения с моими наборами учетных записей?

Для примера предположим, что RDD загружен из CSV (я сделал эти данные)

Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|... 
Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|... 
Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|... 
Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|... 
Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|... 
Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|... 
Donald|Trump|US|Election|March|Spring|Rubio|Ted Cruz|Ben Carson|Primary|Winner|... 
... 

ДРР имеет до 300 колонок/полей.

Моя основная цель - преобразовать его в некоторый json, но мне нужно связать каждое значение с ключом, загрузив его в карту или класс.

var election = Map ("firstname" -> "Donald", 
"lastname" -> "Trump", 
"country" -> "US", 
"event" -> "Election", 
"period" -> "March" 
"var1" -> "Spring", 
.... 
"varN" -> "...") 
+0

Я хотел бы помочь вам, но я понятия не имею, что вам нужно. Предоставьте некоторый код с макетными данными и удалите зависимости Spark. Например. «У меня есть этот список <пример списка вставки здесь>, и я хочу преобразовать его в этот набор . Я понятия не имею, какие данные у вас есть, как это отформатировано, что вы получаете, когда вы разделяете от «|» и что вам нужно с этим делать. – slouc

+0

@slouc - Я просто включил пример, пожалуйста, проверьте его. –

ответ

1

Я не уверен, правильно ли я понял, но помогает ли это?

val data = List(
    "Donald|Trump|US|Election|March", 
    "John|Smith|UK|Election|February" 
) 

val mapKeys = List("firstname", "lastname", "country", "event", "period") 

val election = data.map { row => 
    (mapKeys zip row.split("\\|").toList).map { 
    case (key, value) => key -> value 
    }.toMap 
} 

Таким образом, вы получите список карт - для каждой строки ваших данных вы получите карту пар ключ/значение, как вы описали.

+0

@sloc - Ницца! Я дам ему шанс ... имеет смысл. я думаю, что сейчас, может быть, я мог бы создать RDD из 'data' и объединить его с существующим RDD и использовать встроенную функцию для преобразования RDD в json? –

0

Немного чистой до @slouc ответ

stream.foreachRDD {_.map(_._2).map(l => (mapKeys zip l.split("\\|")).toMap).saveToEs(conf)} 
Смежные вопросы