Почему частично применяемая функция ведет себя по-разному в двух похожих сценариях - PullRequest
1 голос
/ 11 июля 2019

Я работал над созданием функции, которая принимает в качестве аргументов строку подключения, запрос 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 Ответ

1 голос
/ 11 июля 2019
import org.apache.spark.sql.DataFrame  
def PerformSqlOperations: String => DataFrame = {
    spark.read.jdbc(connectionString,_:String,connectionProps)  
}  

Вам просто нужно удалить () после имени функции.После удаления скобок он работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...