Я пишу метод в zeppelin, который обновит несколько DataFrames, который будет вызываться как часть инициализации моего кода.
Шаблон, который мы используем, состоит в том, чтобы определить все методы инициализации в их собственных абзацах, а затем вызвать их как часть блока.
def init(nc: NotebookContext) = {
method1()
method2()
}
Однако для большинства сигнатур определения методов без параметров кажется, что zeppelin фактически вызывает и оценивает последний метод в абзаце. Это проблема, потому что когда метод вызывается позже, это означает, что преобразования были применены к DataFrame дважды, что нежелательно.
Является ли это функцией scala, или причудой дирижабля, или обоих? Почему некоторые из этих объявлений оцениваются немедленно, в то время как другие ожидают вызова?
Предположим, что каждый из перечисленных ниже методов определен в их собственном абзаце zeppelin
def runsAutomatically(): Unit = { println("test") }
//runsAutomatically: ()Unit
//test
def runsAutomatically2 = { println("test2") }
//runsAutomatically2: Unit
//test2
def waitsForDefinition= () => { println("test") }
//waitsForDefinition: () => Unit
Я понимаю, что есть разница в scala между функциями / методами без списков параметров и одним списком параметров без параметров, но я не знаю, почему эти разные версии будут меняться, когда все будет выполнено.
Наконец, если сделать это в одном абзаце:
def runsAutomatically(): Unit = { println("test") }
def runsAutomatically2 = { println("test") }
//runsAutomatically: ()Unit
//runsAutomatically2: Unit
//test2
Это просто причуда дирижаблей или что-то вроде Scala Я пропускаю?