如何获得使用concat_ws生成的结果的大小?

Kri*_*sad 2 java apache-spark apache-spark-sql

groupBy在COL1上执行,并使用获取了COL2的串联列表concat_ws。如何获取该列表中的值计数?这是我的代码:

Dataset<Row> ds = df.groupBy("COL1").agg(org.apache.spark.sql.functions
    .concat_ws(",",org.apache.spark.sql.functions.collect_list("COL2")).as("sample"));
Run Code Online (Sandbox Code Playgroud)

Jac*_*ski 6

使用尺寸功能。

size(e:Column):Column返回数组或映射的长度。


下面的示例在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|
+----+------+----+
Run Code Online (Sandbox Code Playgroud)

在Java中如下所示。感谢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"));
Run Code Online (Sandbox Code Playgroud)