这个问题在这里已经有答案了:
如何在sparksql中获得两个日期之间的月、年差(4个答案)
两年前关门了。
我想要' 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)
我尝试创建示例自定义项,以获得 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());
那么,如何修改我的自定义项代码以获得预期的格式呢?
1条答案
按热度按时间tzdcorbm1#
你不是这样用的
org.apache.spark.sql.functions.*
current_date
退货Column
.year
拿Column
返回Column
.此外,spark使用
java.sql.Date
不是java.util.date
. 如果你想使用自定义项(UserDefinedFunction
)你应该如果你想用
year
以及current_date
应操作的功能Columns
.