2016-02-24 27 views
0

我在Scala中爲Spark創建了一組算法和幫助器,可以處理不同格式的測量數據。它們都基於Hadoop的FileInputFormat。我還創建了一些助手來簡化Cassandra數據庫中時間序列數據的工作。我現在需要一些已經存在於Thunder中的高級函數,另外一些與這些輔助函數一起工作的同事想要使用Python。是否有可能使用python的這些幫助函數,還是我必須重新實現它們?從pySpark調用基於JVM的算法/函數可能嗎?

我讀了很多文檔,只發現你可以用pyspark加載額外的jar,但不知道如何使用這些函數。

+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的Spark上下文,即JavaSparkContext。要得到原始的斯卡拉SparkContext,你必須使用:

sc._jsc.sc() 
+0

好的!儘管如此,它並沒有在Spark中記錄,因爲它不是Spark相關的Java/Python互操作性 – eliasah

相關問題