我有一个用Scala编写的库,它有一些函数,可以从许多测量数据格式中加载数据并进行一些计算。这些函数都在DataFrame
的Scala版本上运行。在
现在我想在PySpark中使用Python代码中的这些库。我写了一些helper对象(因为我的库在package对象中使用了很多隐式函数)来帮助从Python调用这些东西,并且我成功地完成了如下工作:(spark
是PythonSparkSession
)
sdf = spark._jvm.com.mycompany.PyApiFooHelper.loadFooMeasuringData(spark._jsparkSession, "hdfs:///some/where")
sCalcResult = spark._jvm.com.mycompany.PyApiBarCalculationHelper.doBarCalculation(sdf)
当我想在Python中使用sCalcResult
时,我目前按照this question,中所述的方法进行操作:注册一个临时视图并将其引入:
但是我发现这很难看,因为当我的数据科学家同事“隐藏它”时,它会导致名称冲突,因为函数每次都需要创建临时表。或者我生成随机表名,但是我可能会有大量的表,这些表在一段时间后就不再需要了。在
那么,有没有类似的函数:
pythonDataFrame = scalaToPythonDataframe(scalaDataFrame)
pythondf有一个_jdf
字段来获取Java/Scala数据源,因此使用临时视图进行修改不是一种方法。。。还是真的?在
编辑:我目前正在使用Spark 2.3。在
我查看了Spark的源代码,找到了解决方案。在
DataFrame
有一个双参数构造函数,它接受JVM DF引用和一个SQLContext
,在其Python变体中。在SQLContext
通过其_wrapped
字段从SparkSession
获得,或从另一个{sql_ctx
字段获得。在所以,是这样做的:
相关问题 更多 >
编程相关推荐