Я использую 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()
вызов.
Спасибо!