Я использую Spark SQL для извлечения строк из таблицы. Некоторые из этих данных повторяются, и я пытаюсь подсчитать их количество. По сути, я пытаюсь выполнить базовый пример «подсчета слов», но вместо того, чтобы мои данные были в форме: (Word : String, Count : Int)
, у нас есть строка данных, заменяющая слово/строку.
В частности, мои данные выглядят так: RDD[((row), count)]
, где строка извлекается из таблицы sql и содержит строки, двойные числа, целые числа и т. д.
Он в форме RDD
, потому что я хочу использовать reduceByKey
. См. статью Избегайте использования groupByKey. Это пара (Key, Value)
с очень длинным ключом (какая-то строка из базы данных sql), а ее значением является «количество слов».
Мое приложение делает это:
myDataframe
// Append a 1 to each row
.map(row => (row, 1))
// Convert to RDD so we can use the reduceByKey method
.rdd
// Add up the 1's corresponding to matching keys
.reduceByKey(_ + _)
//Filter by rows that show up more than 10 times
.filter(_._2 > 100)
...
Теперь предположим, что мои данные строки содержат (string, double, int)
. Здесь я хочу распаковать свои данные из RDD[((string, double, int), count)]
в RDD[(string, double, int, count)]
, чтобы в конечном итоге сохранить эти данные в другой таблице SQL.
Есть ли какой-нибудь метод, который позволяет мне распаковать содержимое этого... вложенного кортежа... что-то вроде этого?
Мое решение состояло в том, чтобы «распаковать» элементы RDD следующим образом: .map(row => (row._1._1, row._1._2, row._1._3, row._2))
Но должен быть лучший способ! Если я решу получить больше элементов из строки, мне придется изменить этот вызов .map()
.
Спасибо!