首页 > 解决方案 > 通过 UDF1(结构和案例类)在 Pyspark 中将 Scala 函数注册为 Java 函数

问题描述

我有一个 Scala 案例类作为

final case class TestStruct(
    num_1: Long,
    num_2: Long
        )

我有一个将字符串转换为结构的方法,并希望在 pyspark 中使用它。我定义了以下类:

package com.path.test

// other imports including Gson, etc.
import org.apache.spark.sql.api.java.UDF1

class TestJob extends UDF1[String, TestStruct] {
  def call(someString: String): TestStruct = {
      // code to get TestStruct from someString
  }
}

然后我在 pyspark 中使用

spark.udf.registerJavaFunction("get_struct", "com.path.test")

但是当我使用时df = spark.sql("select get_struct(string_col) from db.tb"),它返回一个空结构。即使我使用df.printSchema()它只是显示struct (nullable = true)而不是它的字段(num_1num_2

其他人在整数(下面的链接)方面取得了成功,但在结构/案例类数据类型方面却没有:

spark-how-to-map-python-with-scala-or-java-user-defined-functions

使用-scala-classes-as-udf-with-pyspark

任何帮助,将不胜感激。

标签: javapythonscalaapache-sparkpyspark

解决方案


推荐阅读