scala - 从用户定义的函数创建火花数据框列
问题描述
这应该是微不足道的 - 但我错过了一些东西:
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
解决方案
问题(如错误状态)是zipUdf
类型UserDefinedFunction
,而withColumn
函数需要一个Column
. 您需要实际调用该zipUdf
函数才能获得Column
回报,即使用()
:
val zdf = df.withColumn("postalCode", zipUdf())
推荐阅读
- c++ - 如何使用卡尔曼滤波器检测到的质心和匈牙利算法来关联上下帧中的运动目标?
- sql - 用许多 SQL 表填充 DataTable 并添加一个新列以了解来自哪个表
- bash - 排序循环函数创建无限子目录
- firebase - TypeError: Object(...) 不是 index.js 上的函数
- redis - 如何通过 redisgraph.so 模块扩展 redis 数据库?
- warnings - 如何抑制clang ++中的警告?
- python-3.x - 如何在 2to3 转换后修复 print((双括号))?
- drools - 如何控制 Drools 中的规则评估(或规则执行)阶段?
- java - 为什么 onClickListener 不做任何事情?
- salesforce - 无法推送 Salesforce 托管包