2015-09-09 2 views
2

Я очень новичок в Spark.Фильтрация записей для всех значений массива в Spark

У меня есть очень простой вопрос. У меня есть массив значений:

listofECtokens: Array[String] = Array(EC-17A5206955089011B, EC-17A5206955089011A) 

Я хочу отфильтровать RDD для всех этих значений токена. Я попытался следующим образом:

val ECtokens = for (token <- listofECtokens) rddAll.filter(line => line.contains(token)) 

Выход:

ECtokens: Unit =() 

Я получил пустой блок, даже если есть записи с этими маркерами. Что я делаю не так?

+0

Какая каждая линия RDD? – Marco

+0

Каждая строка в RDD представляет собой строку типа context_type = EC-Token & token = EC-17A5206955089011B –

+0

И что должно содержать ECtokens? Все строки с действующим токеном? или счетчик всех строк с действующим токеном? – Marco

ответ

1

Вы можете получить этот результат более эффективным способом и результатом будет фильтрованный РДД:

val filteredRDD = rddAll.filter(line => listofECtokens.exists(line.contains)) 

А затем, чтобы получить результат в виде массива, вы должны позвонить собрать или взять на filteredRDD:

//collect brings the RDD to the driver so be carefull cause that can result in a OutOfMemory in that machine 
val ECtokens = filteredRDD.collect() 
//if you only need to print a few elements of the RDD, a safer approach is to use the take() 
val ECtokens = filteredRDD.take(5) 
Смежные вопросы