scala - 在 Spark Scala 中创建 UDF 以获得单列中的特定格式,而不是 SPARK DATAFRAME AND SQL 中的三个不同列
问题描述
我想要Experience
像下面这样的单列中的“”列数据(hire_date
这里没有打印。它是下面没有显示的列,但我想在我的数据中显示它):
emp_id | emp_name | salary | Experience
--------+----------+---------+-------------------------
68319 | KAYLING | 6000.00 | 26 years 2 mons 12 days
67858 | SCARLET | 3100.00 | 20 years 9 mons 11 days
以下是我的查询结果:
sqlContext.sql("SELECT emp_id,emp_name,hire_date,salary,datediff(current_date(),hire_date) as (Experience) FROM employees WHERE (salary/30)>100").show()
结果:
+------+--------+----------+------+----------+
|emp_id|emp_name| hire_date|salary|Experience|
+------+--------+----------+------+----------+
| 68319| KAYLING|1991-11-18|6000.0| 9763|
| 67858| SCARLET|1997-04-19|3100.0| 7784|
架构:
|-- emp_id: long (nullable = true)
|-- emp_name: string (nullable = true)
|-- job_name: string (nullable = true)
|-- manager_id: long (nullable = true)
|-- hire_date: date (nullable = true)
|-- salary: double (nullable = true)
|-- commision: double (nullable = true)
|-- dep_id: long (nullable = true)
我尝试创建示例 UDF 以在 Scala 中获得差异,year
但它一直给我错误。以下是我的错误代码:
def getYearValue(value:java.util.Date):String= {
val year1:String=year(current_date()-year(hire_date);
year1;
}
错误:
<console>:26: error: type mismatch;
found : org.apache.spark.sql.Column
required: String
val year1:String=year(current_date());
那么如何修改我的 UDF 代码以获得预期的格式呢?
解决方案
这不是你使用的方式org.apache.spark.sql.functions.*
current_date
返回Column
。year
接受Column
并返回Column
。
此外,Sparkjava.sql.Date
不使用java.util.date
. 如果你想使用 UDF ( UserDefinedFunction
) 你应该
val getYearValue = udf((value: java.sql.Date) => {
val year1: String = java.time.LocalDate.now.getYear.toString
year1
})
如果你想使用year
和current_date
功能,你应该在Columns
.
val ds: Dataset[Row] = ???
val current_year: Column = year(current_date())
ds.select(current_year)
推荐阅读
- mysql - MySQL GROUP_CONCAT 添加斜杠
- android - setRequestedOrientation 后屏幕高度不正确
- autodesk-forge - 从本地文件夹加载 dwg 绘图
- asp.net - IIS 重写/重定向规则
- css - 如何选择具有类的 div 标签内的所有 div 标签?
- xslt - XSLT 在使用调用模板时删除空 xmlns
- python - Django:列不存在
- c# - 使用 EF 从外部表中仅获取最新的插入行
- css - 如何防止元素跳转到div中的新行?
- javascript - 如何删除在我所有的 wordpress 帖子中注入的脚本代码