Python 如何在Pyspark中使用Scala类
我已经在Python 如何在Pyspark中使用Scala类,python,scala,apache-spark,pyspark,apache-spark-sql,Python,Scala,Apache Spark,Pyspark,Apache Spark Sql,我已经在Pyspark中搜索了一段时间,是否有任何方法可以使用Scala类,但我没有找到任何关于这个主题的文档或指南 假设我在Scala中创建了一个简单的类,它使用了apachespark的一些库,类似于: class SimpleClass(sqlContext: SQLContext, df: DataFrame, column: String) { def exe(): DataFrame = { import sqlContext.implicits._ df.se
Pyspark
中搜索了一段时间,是否有任何方法可以使用Scala
类,但我没有找到任何关于这个主题的文档或指南
假设我在Scala
中创建了一个简单的类,它使用了apachespark
的一些库,类似于:
class SimpleClass(sqlContext: SQLContext, df: DataFrame, column: String) {
def exe(): DataFrame = {
import sqlContext.implicits._
df.select(col(column))
}
}
- 在
中是否有可能使用此类Pyspark
- 太难了吗
- 我必须创建
文件吗李>.py
- 有没有任何指南说明如何做到这一点
顺便说一句,我也看了spark的代码,我觉得有点不知所措,我无法为我自己的目的复制它们的功能。是的,这是可能的,尽管可能并不琐碎。通常,您需要一个Java(友好的)包装器,这样您就不必处理Scala特性,这些特性无法用普通Java轻松表达,因此无法很好地使用Py4J网关 假设您的类是int,那么包
com.example
将调用PythonDataFrame
df
df = ... # Python DataFrame
你必须:
--driver class path
参数/spark submit
将其包含在驱动程序类路径中。根据具体的代码,您可能还必须使用--jars
传递它SparkContext
实例中提取JVM实例:
jvm = sc._jvm
ssqlContext = sqlContext._ssql_ctx
SQLContext
实例中提取ScalaSQLContext
:
jvm = sc._jvm
ssqlContext = sqlContext._ssql_ctx
df
中提取JavaDataFrame
:
jdf = df._jdf
SimpleClass的新实例
:
simpleObject = jvm.com.example.SimpleClass(ssqlContext, jdf, "v")
exe
方法并使用PythonDataFrame
包装结果:
from pyspark.sql import DataFrame
DataFrame(simpleObject.exe(), ssqlContext)
数据帧
。当然,您可以将所有步骤合并到一个调用中
重要:仅当Python代码仅在驱动程序上执行时,此方法才可行。它不能在Python操作或转换中使用。有关详细信息,请参阅。如果scala类也有其他构造函数,会发生什么?它应该有用吗?