PySpark - Как получить доступ к Java-объекту / функции в функции карты в RDD.Если объект не сериализуем - PullRequest
0 голосов
/ 25 сентября 2018

Есть ли какой-нибудь выход для доступа к java-объектам на рабочих узлах через pyspark?

Ниже приведен мой рабочий пример скалярного кода.Я пытаюсь добиться того же с помощью python на pyspark.

import test.Transformation
import test.GeneralPreHook

sc.addJar("/navi/Transformer.jar")
GeneralPreHook.config(sc.hadoopConfiguration)
val params = sc.hadoopConfiguration.get("params")
val file = sc.textFile("adl://xxxxx.azuredatalakestore.net/navi/test.txt")

val output = file.flatMap(line => line.split("\n")).map{word =>
    val transformer = new Transformation(params)
    transformer.decryptString(word)
    }

output.saveAsTextFile("adl://xxxxx.azuredatalakestore.net/navi/Out")

Вот пример кода Python, который я пытаюсь выполнить через pyspark.

Открыть оболочку pyspark с нижепараметры.

pyspark --jars /navi/Transformer.jar --master yarn

from pyspark import SparkContext

#Add required jar files to distributed cache which can be used by slave nodes
sc._jsc.addJar("/navi/Transformer.jar")
sc._jvm.test.Transformation.setParams(params)
# Create a RDD of the input file. 
file = sc.textFile("adl://xxxxx.azuredatalakestore.net/navi/test.txt")

#5. Split each line to tokens, transform input tokens in map class
output=file.flatMap(lambda line: line.split(",")).map(lambda line : sc._jvm.test.Transformer.transformStatic(line))

#Save results(the task directory should be cleaned first)
output.saveAsTextFile("adl://xxxxx.azuredatalakestore.net/navi/Out")

#Alternatively, we can display the results directly
output.collect()

При сборе или сохранении результатов в выходной файл, яошибки ниже: -

pickle.PicklingError: Не удалось сериализовать объект: Исключение: Похоже, что вы пытаетесь сослаться на SparkContext из широковещательной переменной, действия или преобразования.SparkContext может использоваться только в драйвере, а не в коде, который он запускает на рабочих.Для получения дополнительной информации см. SPARK-5063.

Я много гуглил, но не смог решить эту проблему.Тем не менее, подобный код выполняется отлично с Scala.Любой другой способ использовать функцию java на карте?

Любая помощь по этому вопросу будет принята с благодарностью.Заранее спасибо!

...