汇总派生列火花

时间:2017-07-15 14:22:19

标签: scala apache-spark

DF.groupBy("id")
  .agg(
    sum((when(upper($"col_name") === "text", 1)
    .otherwise(0)))
    .alias("df_count")
    .when($"df_count"> 1, 1)
    .otherwise(0)
  )

我可以对名为别名的列进行聚合吗? ,即如果总和大于1,则返回1其他0

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为你可以在when.otherwise结果周围包裹另一个sum

val df = Seq((1, "a"), (1, "a"), (2, "b"), (3, "a")).toDF("id", "col_name")
df.show
+---+--------+
| id|col_name|
+---+--------+
|  1|       a|
|  1|       a|
|  2|       b|
|  3|       a|
+---+--------+

df.groupBy("id").agg(
  sum(when(upper($"col_name") === "A", 1).otherwise(0)).alias("df_count")
).show()
+---+--------+
| id|df_count|
+---+--------+
|  1|       2|
|  3|       1|
|  2|       0|
+---+--------+


df.groupBy("id").agg(
  when(sum(when(upper($"col_name")==="A", 1).otherwise(0)) > 1, 1).otherwise(0).alias("df_count")
).show()
+---+--------+
| id|df_count|
+---+--------+
|  1|       1|
|  3|       0|
|  2|       0|
+---+--------+