Use size http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.functions%24@size(e:org.apache.spark.sql.Column):org.apache.spark.sql.Column功能。
大小(e:列):列返回数组或映射的长度。
以下示例使用 Scala 编写,您可以将其转换为 Java,但无论使用哪种编程语言,总体思路都是完全相同的。
val input = spark.range(4)
.withColumn("COL1", $"id" % 2)
.select($"COL1", $"id" as "COL2")
scala> input.show
+----+----+
|COL1|COL2|
+----+----+
| 0| 0|
| 1| 1|
| 0| 2|
| 1| 3|
+----+----+
val s = input
.groupBy("COL1")
.agg(
concat_ws(",", collect_list("COL2")) as "concat",
size(collect_list("COL2")) as "size") // <-- size
scala> s.show
+----+------+----+
|COL1|concat|size|
+----+------+----+
| 0| 0,2| 2|
| 1| 1,3| 2|
+----+------+----+
在 Java 中,如下所示。谢谢克里希纳·普拉萨德 https://stackoverflow.com/users/5061863/krishna-prasad与 SO/Spark 社区分享代码!
Dataset<Row> ds = df.groupBy("COL1").agg(
org.apache.spark.sql.functions.concat_ws(",",org.apache.spark.sql.functions.collect_list("COL2")).as("sample"),
org.apache.spark.sql.functions.size(org.apache.spark.sql.functions.collect_list("COL2")).as("size"));