scala DataFrame selectExpr接受一个或两个参数?

时间:2016-03-18 19:12:37

标签: scala

我试图了解某人的scala代码(已构建且运行正常)具有:

  // df is of type DataFrame
  df.selectExpr("*", clause)

在查看DataFrame的此链接时:https://spark.apache.org/docs/1.6.1/api/scala/#org.apache.spark.sql.DataFrame, selectExpr的语法下面有这个签名,似乎只接受一个参数:

    def  selectExpr(exprs: String*): DataFrame 

那么为什么我上面提到的代码传递了两个参数而不是一个?

什么是“String *”?它显示它是“scala.Predef.String”类型,但很难在网上找到一个明确的例子,谈论使用“String *作为一种类型。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

类型名称后面的星号只是用于定义重复参数的Scala方法(请参阅SLS §4.6.3),这与Java中的varargs非常相似。

所以方法声明

def selectExpr(exprs: String*): DataFrame = { /*...*/ }

大致相当于Java版本

public DataFrame selectExpr(String... exprs) { /*...*/ }

并创建一个方法,从零到可能与你一样多的String参数接受。