как взять 2 значения из массива и поместить его как пару и установить счетчик в 1 функцию карты в Scala - PullRequest
0 голосов
/ 21 июня 2019

У меня RDD как Array[(a, b), (a, c), (a, d)]. Я хочу отобразить его как ((a, b), 1), ((a, c), 1), ((a, d), 1) и уменьшить его.

Я пробовал val sol2 = sol1.map{r => ((r._1, r._2), 1)} и val sol2 = sol1.map{case (val1, val2) => ((val1, val2), 1)}, оба не работают

Для кода val sol2 = sol1.map{case (val1, val2) => ((val1, val2), 1)} я получаю сообщение об ошибке:

notebook:2: error: constructor cannot be instantiated to expected type;
 found   : (T1, T2)
 required: org.apache.spark.sql.Row

val sol2 = sol1.map{case (val1, val2) => ((val1, val2), 1)}

1 Ответ

0 голосов
/ 21 июня 2019

Компилятор сообщает вам, что sol1 - это какая-то (Seq / RDD / Dataset - невозможно сказать, не видя остальную часть кода) структура Row, следовательно, Tuple2никогда не совпадет.

Если вы хотите придерживаться сопоставления с шаблоном, вам нужно будет сопоставить всю структуру, включая значения:

import org.apache.spark.sql.Row

sol1.map{case Row(val1: Seq[String], val2: Seq[String]) => ((val1, val2), 1)}

Ссылка Искра, извлекающая значения изРяд

...