2016-02-24 29 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

相关问题