2016-03-03 1 views
2

Я пытался запустить java-функцию в pyspark, используя py4j. Py4j разрешает доступ к java-объектам в JVM. Я создал еще один экземпляр JVM и смог успешно запустить java-функцию.Что такое точка входа для своего py4j gatewayServer в искрах?

py4j включает это сообщение через экземпляр GatewayServer.

Мне было интересно, можем ли мы как-нибудь получить доступ к встроенной JVM для искры для запуска моей функции java? Какова точка входа для py4j Gatewayserver в искру? Как добавить функцию в точку входа?

+1

Не могли бы вы [изменить вопрос] (https://stackoverflow.com/posts/35774347/edit) tp предоставить некоторый фон? Как вы хотите его использовать? Py4J имеет очень ограниченное пространство в Spark. – zero323

ответ

0

Посмотрите на

$SPARK_HOME/python/pyspark/java_gateway.py 

Вы увидите там механизмы, используемые для взаимодействия с серверной Java/Scala.

Вам нужно будет обновить один или несколько файлов Java, как показано здесь:

java_import(gateway.jvm, "org.apache.spark.SparkConf") 
java_import(gateway.jvm, "org.apache.spark.api.java.*") 
java_import(gateway.jvm, "org.apache.spark.api.python.*") 
java_import(gateway.jvm, "org.apache.spark.mllib.api.python.*") 
# TODO(davies): move into sql 
java_import(gateway.jvm, "org.apache.spark.sql.*") 
java_import(gateway.jvm, "org.apache.spark.sql.hive.*") 
java_import(gateway.jvm, "scala.Tuple2") 

Они представляют Spark-Java точки входа.

Pyspark использует точки входа Spark-Java вместо того, чтобы напрямую переходить на Scala. Вам необходимо либо - (a) использовать существующие в этих классах API, либо - (b) добавить новые точки входа в эти классы и создать собственную версию Spark

1

Я не уверен, что это то, что вы нужно, но есть два места, которые я видел:

sc._gateway.jvm 

, которые могут быть использованы для java_import или непосредственно

sc._jvm 

Так, чтобы получить доступ класса X в пакете аЬсе вы можете выполнить одно из следующих действий:

jvm = sc._gateway.jvm 
java_import(jvm,"a.b.c.X") 
instance = a.b.c.X() 

или более непосредственно:

instance = sc._jvm.a.b.c.X() 

Для добавления функции Java вам потребуется, чтобы убедиться, что он находится в пути к классам, и если вы хотите использовать его в рабочих (например, в UDF), то вам нужно отправить его рабочим. Для этого вы можете использовать ключ -driver-class-path для включения-возврата (или pyspark) для добавления к драйверу и -jars для отправки рабочим.

 Смежные вопросы

  • Нет связанных вопросов^_^