首页 > 解决方案 > 在尝试在 PySpark 中使用 SCALA UDF 时,尽管提供了 --jars:错误:pyspark.sql.utils.AnalysisException:u'Can not load class

问题描述

我正在尝试在 PySpark 中使用 scala UDF。

我创建了一个 jar 文件,它有一个 scala UDF,其代码如下所示:

package example
import org.apache.spark.sql.expressions.UserDefinedFunction
import org.apache.spark.sql.functions._
object UDF_Scala_code {
  def main(args: Array[String]): Unit = {
    getFun()
  }
  def getStringLength(s: String) = s.length
  def getFun(): UserDefinedFunction = udf(getStringLength _)
}

使用 Spark 2.4

我在 pyspark 代码(use_scala_udf1.py)中收到以下行错误:

spark.udf.registerJavaFunction("get_col_len", "example.UDF_Scala_code.getFun", StringType())

我正在运行的命令是:

spark2-submit --jars /path/ws_spark_scala.jar use_scala_udf1.py

错误:

pyspark.sql.utils.AnalysisException: u'Can not load class example.UDF_Scala_code.getFun, please make sure it is on the classpath;'

但是,如果我在 Pyspark 中使用以下代码,我会得到预期的结果。

_string_length = sc._jvm.example.UDF_Scala_code.getFun()
return Column(_string_length.apply(_to_seq(sc, [col], _to_java_column)))

谢谢。

标签: scalaapache-sparkpysparkuser-defined-functions

解决方案


推荐阅读