我试图了解某人的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 *作为一种类型。
感谢您的帮助。
答案 0 :(得分:2)
类型名称后面的星号只是用于定义重复参数的Scala方法(请参阅SLS §4.6.3),这与Java中的varargs非常相似。
所以方法声明
def selectExpr(exprs: String*): DataFrame = { /*...*/ }
大致相当于Java版本
public DataFrame selectExpr(String... exprs) { /*...*/ }
并创建一个方法,从零到可能与你一样多的String
参数接受。