apache-spark - 为什么输入类型 Spark UDF 是结构列的行?它是如何在 Spark 中实现的?
问题描述
对于单列,UDF 的输入类型是该列的数据类型,而对于 struct 列,输入类型是 Row,为什么以及如何实现?
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
val sub_schema = StructType(StructField("col1",ArrayType(IntegerType,false),true) :: StructField("col2",StringType,true)::Nil)
val schema = StructType(StructField("subtable", sub_schema,true) :: Nil)
val data = Seq(Row(Row(Array(1,2),"eb")), Row(Row(Array(3,2,1), "dsf")) )
val rd = sc.parallelize(data)
val df = spark.createDataFrame(rd, schema)
df.printSchema
val u = udf((x:Row) => x, sub_schema)
root
|-- subtable: struct (nullable = true)
| |-- col1: array (nullable = true)
| | |-- element: integer (containsNull = false)
| |-- col2: string (nullable = true)
解决方案
推荐阅读
- groovy - 收集和格式化 Groovy 映射
- javascript - 显示 2 个组合 JSON 对象的模块化结果
- jdbc - 一种在soap ui中使用带有属性的jdbc语句的方法
- c# - 未显示缩略图卡的 MS Teams 轮播
- javascript - 为什么这个 PHP 登录脚本不起作用?
- javascript - 混合纹理(aframe/js)
- visual-studio - 如何使用 Visual Studio for mac 将 Xamarin 表单应用程序部署到设备
- sql - oracle sql中的最小日期
- jsoup - 我想用 Jsoup 解析这个 lisk,但它失败了“https://www.express.pk/world/archives/?page=1”
- sql - Access 2016 中的转置或旋转