当前位置:  开发笔记 > 编程语言 > 正文

Spark:scala rdd中的group concat等价物

如何解决《Spark:scalardd中的groupconcat等价物》经验,为你挑选了1个好方法。

我有以下DataFrame:

    |-----id-------|----value------|-----desc------|
    |     1        |     v1        |      d1       |
    |     1        |     v2        |      d2       |
    |     2        |     v21       |      d21      |
    |     2        |     v22       |      d22      |
    |--------------|---------------|---------------|

我想把它变成:

    |-----id-------|----value------|-----desc------|
    |     1        |     v1;v2     |      d1;d2    |
    |     2        |     v21;v22   |      d21;d22  |
    |--------------|---------------|---------------|

是否可以通过数据框操作?

在这种情况下,rdd转换会如何?

我认为rdd.reduce是关键,但我不知道如何使它适应这种情况.



1> Kaushal..:

您可以使用spark sql转换数据

case class Test(id: Int, value: String, desc: String)
val data = sc.parallelize(Seq((1, "v1", "d1"), (1, "v2", "d2"), (2, "v21", "d21"), (2, "v22", "d22")))
  .map(line => Test(line._1, line._2, line._3))
  .df

data.registerTempTable("data")
val result = sqlContext.sql("select id,concat_ws(';', collect_list(value)),concat_ws(';', collect_list(value)) from data group by id")
result.show


很奇怪,我使用的是Spark 1.6.1!当我这样做时,它说:undefined function collect_list; 我还添加了functions._ import
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有