UDF 的输入类型应该是啥类型的列 - StructType 数组或“null”?
Posted
技术标签:
【中文标题】UDF 的输入类型应该是啥类型的列 - StructType 数组或“null”?【英文标题】:What should be the input type for a UDF taking in columns of type - Array of StructType or "null"?UDF 的输入类型应该是什么类型的列 - StructType 数组或“null”? 【发布时间】:2019-11-10 18:36:29 【问题描述】:我的 DataFrame 的架构如下:
root
|-- col1: string (nullable = true)
|-- col2: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- unit1: string (nullable = true)
| | |-- sum(unit2): string (nullable = true)
| | |-- max(unit3): string (nullable = true)
|-- col3: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- unit1: string (nullable = true)
| | |-- sum(unit2): string (nullable = true)
| | |-- max(unit3): string (nullable = true)
我正在 scala 中编写一个 UDF,它接受 cols - col2 和 col3。 考虑到 col2 的值可以是 "null"
,我传递给 UDF 的每一列的输入类型应该是什么val process_stuff = udf((col2: ???, col3: ??? ) =>
到目前为止,我已经尝试过这个和我的其他东西
val process_stuff = udf((col2:ArrayType[StructType[StructField]], col3:ArrayType[StructType[StructField]]) =>
但它在这里和那里给我警告 请帮忙!
【问题讨论】:
【参考方案1】:您的 UDF 应具有以下签名:
val process_stuff = udf((col2: Seq[Row], col3: Seq[Row]) => ...)
【讨论】:
不起作用。在 UDF 中,当我访问 unit1 时出现类型不匹配错误:说“找到:任何,需要:字符串” 尝试将 Seq[Row] 替换为 Seq[String] 它应该可以工作。以上是关于UDF 的输入类型应该是啥类型的列 - StructType 数组或“null”?的主要内容,如果未能解决你的问题,请参考以下文章
在将 .toArray() 用于 Spark 向量之后,它应该是啥类型?