Python 是否可能从pySpark调用基于JVM的算法/函数?

Python 是否可能从pySpark调用基于JVM的算法/函数?,python,scala,apache-spark,pyspark,Python,Scala,Apache Spark,Pyspark,我在Scala中创建了一组算法和助手,用于Spark处理不同格式的测量数据。它们都基于Hadoop的FileInputFormat。我还创建了一些助手,以便轻松处理来自Cassandra数据库的时间序列数据。现在,我需要一些中已经存在的高级函数,加上一些准备使用这些辅助函数的同事希望使用Python。是否有可能从python中使用这些助手函数,或者我必须重新实现它们 我阅读了很多文档,只发现你可以用pyspark加载额外的JAR,但无法使用这些函数。“偶然”我找到了解决方案:它是“Java网关”

我在Scala中创建了一组算法和助手,用于Spark处理不同格式的测量数据。它们都基于Hadoop的
FileInputFormat
。我还创建了一些助手,以便轻松处理来自Cassandra数据库的时间序列数据。现在,我需要一些中已经存在的高级函数,加上一些准备使用这些辅助函数的同事希望使用Python。是否有可能从python中使用这些助手函数,或者我必须重新实现它们

我阅读了很多文档,只发现你可以用pyspark加载额外的JAR,但无法使用这些函数。

“偶然”我找到了解决方案:它是“Java网关”。Spark文档中没有记录这一点(至少我没有找到它)

下面是它的工作原理,以“Gregorianalendar”为例

j = sc._gateway.jvm
cal = j.java.util.GregorianCalendar()
print cal.getTimeInMillis()
但是,传递SparkContext并不直接起作用。Java SparkContext位于
\u jsc
字段中:

ref = j.java.util.concurrent.atomic.AtomicReference()
ref.set(sc)
这是失败的。然而:

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

但是请注意,
sc.\u jsc
返回一个基于Java的Spark上下文,即
JavaSparkContext
。要获取原始Scala
SparkContext
,必须使用:

sc._jsc.sc()

这实际上是可能的。@eliasah这要看情况而定,不是吗?你可以触发高级转换,但不可能从工作者那里得到相同的东西。这是真的!我在想另一种方法,就像我所做的那样,如果我通过隐式类创建了“sc.coolMeasuringDataFile”,我可以从pyspark使用它吗?如果可以,我怎么做?很好!尽管如此,Spark中并没有对其进行记录,因为它与Spark无关,而与Java/Python互操作性相关