Scala - столбец GroupBy в определенном формате - PullRequest
0 голосов
/ 30 августа 2018

DF1 - это то, что у меня сейчас, и я хочу, чтобы DF1 выглядел как DF2.

Желаемый вывод:

 DF1                                DF2
+---------+-------------------+          +---------+------------------------------+
|   ID    | Category          |          |   ID    | Category                     |
+---------+-------------------+          +---------+------------------------------+  
|  31898  |   Transfer        |          |  31898  |  Transfer (e-Transfer)       |  
|  31898  |  e-Transfer       |  =====>  |  32614  |  Transfer (e-Transfer + IMT) |
|  32614  |   Transfer        |  =====>  |  33987  |   Transfer (IMT)             |
|  32614  |  e-Transfer + IMT |          +---------+------------------------------+      
|  33987  |   Transfer        |  
|  33987  |    IMT            |  
+---------+-------------------+

Код:

val df = DF1.groupBy("ID").agg(collect_set("Category").as("CategorySet"))
val DF2 = df.withColumn("Category", $"CategorySet"(0) ($"CategorySet"(1)))

Код не работает, как его решить? И если есть какие-то другие лучшие способы сделать то же самое, я открыт для этого. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

ответ с небольшим изменением

df.groupBy («ID»). Agg (collect_set (col («Category»)). As («Category»)). WithColumn («Category», concat (col («Category») (0), горит («(«), col («категория») (1), горит («)»)). show

0 голосов
/ 30 августа 2018

Вы можете попробовать это:

val sliceRight = udf((array : Seq[String], from : Int) => " (" + array.takeRight(from).mkString(",") +")")

val df2 =  df.groupBy("ID").agg(collect_set("Category").as("CategorySet"))
df2.withColumn("Category", concat($"CategorySet"(0),sliceRight($"CategorySet",lit(1))))
.show(false)

Выход:

+-----+----------------------------+---------------------------+
|ID   |CategorySet                 |Category                   |
+-----+----------------------------+---------------------------+
|33987|[Transfer, IMT]             |Transfer (IMT)             |
|32614|[Transfer, e-Transfer + IMT]|Transfer (e-Transfer + IMT)|
|31898|[Transfer, e-Transfer]      |Transfer (e-Transfer)      |
+-----+----------------------------+---------------------------+        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...