为什么部分应用功能在两种相似的情况下表现不同

时间:2019-07-11 13:12:03

标签: scala function

我正在创建一个将连接字符串,SQL查询和连接属性作为参数的函数。
第一个方案可以正常工作,但第二个方案因提到的错误而失败。

第一种情况有效:

    val readSqlData = spark.read.jdbc(connectionString,_:String,connectionProps)  
    val data= readSqlData("(SELECT * FROM TestTable) as TestTable")  

以上两行为我提供了DataFrame类型的数据值。

第二种情况:

现在,我正在尝试创建一个可以在任何地方作为辅助函数调用的函数,因此我们不必为创建的每个SQL语句传递连接字符串和连接属性,如下所示:

    import org.apache.spark.sql.DataFrame
    def PerformSqlOperations(): String => DataFrame = {
         spark.read.jdbc(connectionString,_:String,connectionProps)
    }

该函数可正确编译,但是当我通过传递Sql Query来执行此函数时,如下所示:

    PerformSqlOperations("(SELECT * FROM TestTable) as TestTable")   

现在,我收到错误方法PerformSqlOperations()的参数过多的提示。

我无法理解为什么会发生这种情况,因为上面工作的代码与此类似,而我只是想将其包装在函数中,以简化多次调用的过程。

任何帮助或想法都会使我知道为什么函数创建和执行会导致提到的错误。

1 个答案:

答案 0 :(得分:1)

import org.apache.spark.sql.DataFrame  
def PerformSqlOperations: String => DataFrame = {
    spark.read.jdbc(connectionString,_:String,connectionProps)  
}  

您只需要删除函数名称后的()。删除括号后,它可以按预期工作。