spark scalaDataframe和数据集实现预期输出

k0pti3hp  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(449)

这个问题在这里已经有答案了

groupby之后如何将值聚合到集合中(3个答案)
六个月前关门了。
我有一个Dataframe如下

  1. scala> df.show
  2. +----+------+
  3. |SLNO|Values|
  4. +----+------+
  5. | A| y|
  6. | A| t|
  7. | A| e|
  8. | B| f|
  9. | C| g|
  10. | B| h|
  11. | C| k|
  12. | C| u|
  13. | B| p|
  14. +----+------+

预计结果如下:

  1. SLNO Values
  2. A y,t,e
  3. B f,h,p
  4. C g,k,u

如何通过sparkscala的dataframe和dataset模型实现这一点?。
我在数据集中尝试了下面这样的方法,但在这之后就被打中了

  1. scala> ds.filter(line=> line.split("\t")(0).size <=1 ).map(line => Map(line.split("\t")(0) -> line.split("\t")(1)))
  2. res86:org.apache.spark.sql.Dataset[scala.collection.immutable.Map[String,String]] = [value: map<string,string>]

//不知道如何进一步分组

1rhkuytd

1rhkuytd1#

检查以下代码。

  1. scala> df.show(false)
  2. +----+------+
  3. |slno|values|
  4. +----+------+
  5. |A |y |
  6. |A |t |
  7. |A |e |
  8. |B |f |
  9. |C |g |
  10. |B |h |
  11. |C |k |
  12. |C |u |
  13. |B |p |
  14. +----+------+
  15. scala> df
  16. .groupBy("slno")
  17. .agg(concat_ws(",",collect_list($"values")).as("values"))
  18. .orderBy($"slno".asc)
  19. .show(false)
  20. +----+------+
  21. |slno|values|
  22. +----+------+
  23. |A |y,t,e |
  24. |B |f,h,p |
  25. |C |g,k,u |
  26. +----+------+
  1. scala> case class Example(slno: String,values:String)
  2. defined class Example
  1. scala> val ds = Seq(Example("A","y"),Example("A","t"),Example("A","e"),Example("B","f"),Example("C","g"),Example("B","h"),Example("C","k"),Example("C","u"),Example("B","p")).toDS
  1. scala> ds
  2. .groupBy("slno")
  3. .agg(concat_ws(",",collect_list($"values")).as("values"))
  4. .orderBy($"slno".asc)
  5. .show(false)
  6. +----+------+
  7. |slno|values|
  8. +----+------+
  9. |A |y,t,e |
  10. |B |f,h,p |
  11. |C |g,k,u |
  12. +----+------+
展开查看全部
wpcxdonn

wpcxdonn2#

  1. df.createOrReplaceTempView("df")
  2. spark.sql("select SLNO, array_join(collect_list(Values), ',') as Values from df group by SLNO")

相关问题