Как команды println в контейнерах spark возвращаются в консоль на master? - PullRequest
0 голосов
/ 18 января 2019

Вот эскиз некоторого кода Scala 2.10 / Spark 1.6.3, который я запускаю:

def processText(df: DataFrame): DataFrame = {

    df.select(col(firstCol), col(secondCol))
        .as[(TypeA, TypeB)]
        .mapPartitions(partitionFunc)
        .map { case (a: TypeA, c: TypeC) => OutputCaseClass(a, b) }
        .toDF().toDF(colNames: _*)
}

def partitionFunc(rows: Iterator[(TypeA, TypeB)]): Iterator[(TypeA, TypeC)] = {
    def rowFunc(a: TypeA, b: TypeB): Option[(TypeA, TypeC)] = {
        try {
            val returnC = functionality(b)
            Option(a, returnC) 
        } catch {
            case e: Exception => println("Error Message")
                None
        }
    }
    rows.map((returnFunc _).tupled)
        .flatten
}

partitionFunc сопоставляется со всеми разделами. Каждая строка в разделе обрабатывается (его НЛП). Если есть какая-либо ошибка, ничего не возвращается, но генерируется сообщение об ошибке.

Как заполнитель, я просто вставил printnn в мой код. К моему удивлению, материал, отправленный в println, оказался на консоли, когда я выполнил это задание с помощью spark-submit.

Я хочу знать, как это происходит. Код выполняется на JVM на узле обработки. Как сообщение, отправленное в STDOUT на этом узле, попадает обратно в мастер и на консоль?

Тест выполнения выполнен с

spark-submit --class com.package.mainclass --master local[4] path/to/jarfile.jar
...