Я новичок в Scala и, очевидно, не понимаю, почему этот код не работает.Scala. Пустая переменная после сопоставления
Я создаю массив из первого DataFrame и при создании второго массива запускает проверку идентичных данных в обоих массивах. В случае идентичных данных - переменная оснастки текст.
var text = "Hello!"
val dfOriginDate = sqlContext.sql("SELECT name, age FROM table2")
val arrOriginDate = dfOriginDate.rdd.map(r => {
r(0).toString + r(1).toString
}).collect()
val dfNewDate = sqlContext.sql("SELECT name, age FROM table")
dfNewDate.rdd.map(r => {
if (arrOriginDate contains(r(0).toString + r(1).toString)) {
text += "found some stupid things"
print(text + " for the first time\r\n")
}
}).collect()
println(text + " for the second time")
На выходе у меня есть это:
Hello! found some stupid things for the first time
Hello! for the second time
Почему, когда я печатаю текст в то время как отображение переменной реализуется, но когда я печатаю его снова после того, как карта - кажется, что это никогда не был на карте?
__
И когда я пытаюсь сделать это с ListBuffer[String]()
он дал мне тот же эффект.
То, что я пытаюсь сделать с этим кодом - найти одинаковые данные в разных таблицах от Кассандры __ Не знаю, какой ответ лучше> < и приемлемо для моей проблемы =)
Спасибо! Мне кажется, мне нужно прочитать какую-нибудь книгу о Scala \ Spark combination =) – ANTVirGEO
Как метод обучения попробуйте использовать класс, который не является сериализуемым (в отличие от String). Вы получите исключение, исключающее сериализацию объекта. Что происходит во время выполнения кода: Вы ссылаетесь на переменную из локального контекста в параллельном контексте. Переменная получает сериализован и передается (через сеть, если задача выполняется на разных машинах) в mapper. – Sohaib