Дедуплицированный кадр данных искры по полю - PullRequest
0 голосов
/ 02 сентября 2018

давайте предположим, что у меня есть следующая искра фрейм данных :

 -----------------------
 | geohash | timehash  |
 ----------------------- 
 | x       | y         |
 -----------------------
 | x       | z         |
 -----------------------
 | z       | y         |

можно ли дублировать его с помощью поля геохэш и собирать результат второго поля, как это? :

 -----------------------
 | geohash | timehash  |
 ---------------------- 
 | x       | y , z     |
 -----------------------
 | z       | y         |

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Вы можете использовать функции groupBy и aggregate для достижения этой цели, как показано ниже

df.groupBy("geohash").agg(collect_list("timehash")).alias("timehash").show

//output
+-------+--------+
|geohash|timehash|
+-------+--------+
|      x|  [y, z]|
|      z|     [y]|
+-------+--------+
0 голосов
/ 02 сентября 2018

Вы можете получить желаемый результат с aggregateByKey из reduceByKey. Я не проверял свой код с точными данными, которые вы предоставили. Однако основной код должен быть похож на

val geoHashRdd = geoHashDF.map(row ⇒ (row.geohash, row.timehash)).rdd;
val reduceByKey = geoHashRdd.reduceByKey((a , b) => a.concat(b))

OR

geoHashRdd.aggregateByKey("")({case (aggr , value) => aggr + String.valueOf(value)}, (aggr1, aggr2) => aggr1 + aggr2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...