Хорошо, я вижу, что в фрагменте кода используется Spark
, но давайте опустим это и просто посмотрим на sampleFunc
. Так что все довольно просто: в следующих конституциях объявляется сама функция:
val sampleFunc: Seq[Row] => (Int, Long, Boolean, Row, String) = ...
, где Seq[Row]
тип аргумента функции и (Int, Long, Boolean, Row, String)
результат функции. Другими словами, вы создаете переменную типа Function1[Seq[Row], (Int, Long, Boolean, Row, String)]
Затем идет тело функции или реализация, если вы будете
... = (mem: Seq[Row]) => {
//some code
(a1,b1,c1,d1,e1) // returning the value
}
, где mem
- это переменная объявленного типа аргумента функции, которая должна быть того же типа или расширить тип, используемый в типе объявления функции. (Аргументы функции являются ко-вариантами. Пожалуйста, посмотрите для другого примера еще один хороший пост SO: Почему функция [-A1, ..., + B] не разрешает использование каких-либо супертипов в качестве параметров? )
=>
оператор говорит, что после него идет само тело функции.
Если у вас есть больше Java
фона или любого другого императивного языкового фона, это также может быть реализовано способом:
def sampleFunc(mem: Seq[Row]): (Int, Long, Boolean, Row, String) = {
//some code
(a1,b1,c1,d1,e1) // returning the value
}
Надеюсь, это поможет!