阿帕奇火花。 UDF 列基于另一列而不将其名称作为参数传递。

Posted

技术标签:

【中文标题】阿帕奇火花。 UDF 列基于另一列而不将其名称作为参数传递。【英文标题】:Apache Spark. UDF Column based on another column without passing it's name as argument. 【发布时间】:2017-02-17 17:22:53 【问题描述】:

有带有公司列的数据集,我正在向该数据集添加另一列 - 公司 ID 这里是示例:

private val firms: mutable.Map[String, Integer] = ...
private val firmIdFromCode: (String => Integer) = (code: String) => firms(code)
val firm_id_by_code: UserDefinedFunction = udf(firmIdFromCode)
...
val ds = dataset.withColumn("firm_id", firm_id_by_code($"firm"))

有没有办法消除将$"firm" 作为参数传递(DS 中始终存在此列)。 我正在为此寻找一些东西:

val ds = dataset.withColumn("firm_id", firm_id_by_code)

【问题讨论】:

【参考方案1】:

您可以在定义 udf 时提供它将使用的列。

val someUdf = udf /*udf code*/.apply($"colName")

// Usage in dataset
val ds = dataset.withColumn("newColName",someUdf)

【讨论】:

以上是关于阿帕奇火花。 UDF 列基于另一列而不将其名称作为参数传递。的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery - 选择一列而不将它们分组在按子句中

如何重命名 df 列而不将列列表临时存储到变量中?

如何删除一列并创建一个新列而不是在 EF Core 中重命名?

拆分数据框的列并将它们重新组合为一列而不显示空格

如何使用Scala的DataFrame比较表中的每一列而不关心列是啥? [重复]

火花滞后与默认值作为另一列