Spark: преобразовать в исходный RDD после reduByKey - PullRequest
0 голосов
/ 04 июля 2018

У меня есть следующий СДР, представляющий данные о продажах:

val rddSales:RDD[((String, String), SalesData)] 

Я пытаюсь создать reduceByKey, где ключ - это строка, состоящая из (saleType + saleDate) из SalesData. На самом деле я хочу отфильтровать SalesData с тем же saleType + saleDate, а затем вернуть RDD[((String, String), SalesData)] без дубликатов.

Я попробовал следующий подход: сначала сопоставил СДР со структурой, где ключом является (saleType + saleDate), а значением является SalesData. Затем вызывается ReduByKey, выбирая первое вхождение записи с определенным ключом.

Это правильный подход? И как следует вернуться к исходной структуре СДР? После того, как lowerByKey у меня есть RDD[((String), SalesData)]

rddSales.map(rddSales => (rddSales._2.saleType + rddSales._2.saleDate, rddSales._2)).reduceByKey((a, b) => a)

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Попытайтесь создать tempRdd [(rddSales._2.saleType + rddSales._2.soldDate, ((String, String), SalesData))], а затем примените reduByKey к tempRdd. В дальнейшем tempRdd можно оптимизировать с помощью операции .map ().

0 голосов
/ 04 июля 2018

Насколько я понимаю, у вас есть RDD[((String, String), SalesData)] и вы хотите то же самое без дубликатов by saleType и saleDate. Если так ...

Как насчет использования (String, String) в качестве ключа вместо преобразования его в String и обратно? тогда вы можете сделать все это с rdd.reduceByKey((a, b) => a)

Обратите внимание, что поскольку порядок строк не сохраняется, это даст вам недетерминированный ответ

...