Spark:scala rdd中的group concat等价物

Sil*_*ose 5 scala group-concat apache-spark rdd spark-dataframe

我有以下DataFrame:

    |-----id-------|----value------|-----desc------|
    |     1        |     v1        |      d1       |
    |     1        |     v2        |      d2       |
    |     2        |     v21       |      d21      |
    |     2        |     v22       |      d22      |
    |--------------|---------------|---------------|
Run Code Online (Sandbox Code Playgroud)

我想把它变成:

    |-----id-------|----value------|-----desc------|
    |     1        |     v1;v2     |      d1;d2    |
    |     2        |     v21;v22   |      d21;d22  |
    |--------------|---------------|---------------|
Run Code Online (Sandbox Code Playgroud)
  • 是否可以通过数据框操作?
  • 在这种情况下,rdd转换会如何?

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

Kau*_*hal 8

您可以使用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
Run Code Online (Sandbox Code Playgroud)

  • 很奇怪,我使用的是Spark 1.6.1!当我这样做时,它说:undefined function collect_list; 我还添加了functions._ import (2认同)