2016-02-24 2 views
0

Я создал набор алгоритмов и помощников в Scala для Spark, работающих с различными форматами измеренных данных. Все они основаны на Hadoop's FileInputFormat. Я также создал некоторых помощников, чтобы облегчить работу с данными временных рядов из базы данных Cassandra. Мне теперь нужны некоторые расширенные функции, которые уже присутствуют в Thunder, а также некоторые из моих коллег, которые должны работать с этими вспомогательными функциями, хотят использовать Python. Можно ли как-то использовать эти вспомогательные функции из python или мне нужно их переопределить?Вызов алгоритмов/функций на основе JVM из pySpark возможен?

Я прочитал много документов и обнаружил, что вы можете загружать дополнительные банки с помощью pyspark, но не как использовать функции.

+0

Фактически возможно. – eliasah

+0

@eliasah Это зависит, не так ли? Вы можете инициировать преобразования высокого уровня, но это невозможно для работника. – zero323

+0

Это правда! Я думал о другом, как то, что я сделал [здесь] (http://stackoverflow.com/a/33500704/3415409) – eliasah

ответ

0

«случайно» Я нашел решение: «Java Gateway». Это не документировано в документации Spark (по крайней мере, я ее не нашел).

Вот как это работает, используя «GregorianCalendar» в качестве примера

j = sc._gateway.jvm 
cal = j.java.util.GregorianCalendar() 
print cal.getTimeInMillis() 

Однако, проходя SparkContext не работает напрямую. Java SparkContext находится в _jsc поле:

ref = j.java.util.concurrent.atomic.AtomicReference() 
ref.set(sc) 

это не удается. Однако:

ref = j.java.util.concurrent.atomic.AtomicReference() 
ref.set(sc._jsc) 

работает.

Однако обратите внимание, что sc._jsc возвращает Яркий контекст на основе Java, то есть JavaSparkContext. Чтобы получить оригинал Scala SparkContext, вы должны использовать:

sc._jsc.sc() 
+0

Хороший! Тем не менее, он не задокументирован в Spark, потому что это не Spark, связанный с совместимостью с Java/Python – eliasah

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