开发者社区> 问答> 正文

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

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: _*))
所以我的问题是:

为什么varargs函数countDistinct首先接收单个字符串/列?这种声明的优点和缺点是什么?
如果我想传递变量参数,如何调整此声明?

展开
收起
社区小助手 2018-12-05 14:36:00 1957 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

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

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

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

    2019-07-17 23:18:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载

相关实验场景

更多