java - 通过 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_1
和num_2
)
其他人在整数(下面的链接)方面取得了成功,但在结构/案例类数据类型方面却没有:
spark-how-to-map-python-with-scala-or-java-user-defined-functions
使用-scala-classes-as-udf-with-pyspark
任何帮助,将不胜感激。
解决方案
推荐阅读
- spring - 考虑在你的配置中定义一个“java.lang.String”类型的bean
- r - 在 R 中为 ggmap 注册 API 密钥
- javascript - 将旧设置与新设置相结合
- ios - swift中覆盖视图之间的差距
- c# - 参数化删除确认 Modal .NET Core 2.1
- wpf - 实体框架 6 不更新外键关系
- spring - Spring Batch 在第一次运行时运行良好,但对于第二次等运行......它一直失败,为什么?
- java - 将数据存储在用户不会更新的应用程序中的最佳方式是什么?
- python - 一个标签的 BeautifulSoup 值返回 None 即使存在一个值并且找到了标签 python
- c++ - 在c ++中将int从txt文件添加到向量