Сериализует ли метод набора данных Spark само вычисление? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть набор данных с несколькими столбцами. Функция должна быть вызвана для вычисления результата с использованием данных, доступных в строке. Поэтому я использовал класс case с методом и создал набор данных, используя его. Например,

case class testCase(x: Double, a1: Array[Double], a2: Array[Double]) {
    var someInt = 0
    def myMethod1(): Unit = {...}    // use x, a1 and a2
    def myMethod2(): Unit = {...}    // use x, a1 and a2
    def result(): { return someInt }

Он вызывается из main() как

val res = myDS.map(_.result()).toDF("result")

Проблема, с которой я сталкиваюсь, заключается в том, что хотя код работает правильно, независимо от того, как я вызываю, в отличие от других частей программы , приведенное выше утверждение не работает одновременно. Независимо от числа исполнителей, ядер и repartition ing, только один экземпляр метода, кажется, работает в данный момент!

Любые намеки на то, на что я должен смотреть, будут оценены.

1 Ответ

0 голосов
/ 11 февраля 2020

Класс case TestCase не должен быть изменяемым, если вы одновременно изменяете состояние объекта, из-за этого ваша программа не будет определяться c. Что касается неправильной информации, которую вы предоставляете, так это то, что этот фрагмент

var someInt = 0

вероятно изменяет значение одновременно несколькими задачами, и я уверен, что вы этого не хотите.

Можете ли вы объяснить, что вы пытаетесь сделать?

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