首页 > 解决方案 > 从用户定义的函数创建火花数据框列

问题描述

这应该是微不足道的 - 但我错过了一些东西:

import org.apache.spark.sql._
import org.apache.spark.functions._

val rand = new java.util.Random(42)
val zipUdf = udf( () => 10000 +  rand.nextInt(200))

val zdf = df.withColumn("postalCode",col(zipUdf))

直接使用udf显然是不正确的:

found   : org.apache.spark.sql.expressions.UserDefinedFunction
 required: org.apache.spark.sql.Column

需要什么魔法?

更新:我已经尝试过以下方法:

 val zdf = df.withColumn("postalCode",zipUdf)

真正的问题是不zipUdf()应该zipUdf

标签: scalaapache-sparkapache-spark-sqluser-defined-functions

解决方案


问题(如错误状态)是zipUdf类型UserDefinedFunction,而withColumn函数需要一个Column. 您需要实际调用该zipUdf函数才能获得Column回报,即使用()

val zdf = df.withColumn("postalCode", zipUdf())

推荐阅读