2015-05-06 6 views
1

У меня вопрос о отображении массива в scala. У меня есть следующий массив:scala-spark Матричное отображение

Array[(scala.collection.immutable.Set[String], com.trends.City, com.trends.State)] 

В принципе, я хочу, чтобы отобразить массив таким образом, что каждая строка в наборе будет иметь com.trends.City и государство прилагается к нему. Результат должен выглядеть примерно так:

Array[(String, com.trends.City, com.trends.State)] 

который, как flatMap, но я хочу com.trends быть там.

Я мог бы также преобразовать массив в RDD, если необходимо, и использовать flatMapValues, но я заинтересован в эффективности, может кто-нибудь сказать мне, что является лучшим способом?

ответ

3

Вы можете использовать flatMap на массиве лестницу, как это:

class City 
class State 
val array: Array[(scala.collection.immutable.Set[String], City, State)] = Array() 
array.flatMap(p => p._1.map(q => (q, p._2, p._3))) 
+0

Я не думаю, что эта версия работает. Он не ищет, принадлежит ли строка к набору, поэтому он всегда будет давать результат, даже если он не должен. –

+0

@ CarlosVilchez может объяснить, что означает u? – abalcerek

+0

'Array [(scala.collection.immutable.Set [String], com.trends.City, com.trends.State)]' имеет Set [String], который определяет, должна ли String быть связана с этим городом и государством , В вашем коде вы повторяете список строк в наборе, а затем создаете каждый возможный результат. Я знаю, что это звучит сложно, но неся со мной. Ничего лучше, чем пример для этой ситуации. Предположим, что у нас есть эти данные: 'val cities = Array (" a "," b "," c ") val cityArray = Array ((Set (" x "," y ")," b "," c "), (Set (" z ")," b2 "," c2 "))' Результат: 'Array ((x, b, c), (y, b, c), (z, b2, c2)) ' –

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