为什么spark varargs函数countDistinct首先接收单个String / Column?

时间:2018-11-28 08:58:24

标签: scala apache-spark

spark org.apache.spark.sql.functions.countDistinct的声明是:

def countDistinct(columnName: String, columnNames: String*): Column
def countDistinct(expr: Column, exprs: Column*): Column

该声明接收变量参数,但首先带有单个String / Column。所以我不能写这样的代码:

val id1sArr = id1.split(",").map(col(_))
df.agg(countDistinct(id1sArr: _*))

所以我的问题是:

  1. 为什么varargs函数countDistinct首先接收单个String / Column?这种声明的优点和缺点是什么?
  2. 如果我想传递变量参数,如何修改此声明?

1 个答案:

答案 0 :(得分:2)

为什么声明中的第一个参数具有单个字符串/列的答案是: countDistinct 至少需要一个参数。如果使用诸如countDistinct(columnNames: String*)之类的声明,则零个参数将被允许。

关于如何传递参数列表,只需编写:

df.agg(countDistinct(id1sArr.head, id1sArr.tail: _*))