【发布时间】:2019-07-08 10:07:52
【问题描述】:
使用 Spark2.3.0 和 Scala
有一个如下表:
created_date mth ColA
2019-01-01 2019-01 a
2019-01-01 2019-01 b
2019-01-02 2019-01 a
2019-01-02 2019-01 b
.
.
2019-06-26 2019-01 a
Schema 看起来像:
root
|-- transaction_created_date: string (nullable = true)
|-- txn_mth: string (nullable = true)
|-- ColA: string (nullable = true)
想比较 created_date 列和 max_date 并创建一个新列
尝试如下:
var max_date = sparkVal.sql(s"""SELECT cast(max(created_date)
as DATE) from BASE_TABLE""").first()
val maxDateValue = max_date.get(0)
var day_counter=10
val data =spark.sql(s"""SELECT
created_date,
mth,
sum(if(date_add(created_date+$day_counter) > cast($maxDateValue as DATE) ),1,0))
as Total_arrival from BASE_TALE a""")
lets say max_date = 2019-06-29想要像这样的输出
created_date mth Total_arrival
2019-01-01 2019-01 1
2019-01-01 2019-01 1
2019-01-01 2019-01 1
2019-01-02 2019-01 1
.
.
2019-06-26 2019-01 0
2019-06-27 2019-01 0
2019-06-28 2019-01 0
2019-06-29 2019-01 0
2019-06-30 2019-01 0
getting below error :
org.apache.spark.sql.AnalysisException:由于数据类型不匹配,无法解析 'CAST(((2019 - 6) - 26) AS DATE)':无法将 int 转换为日期;第 43 行第 106 行;
任何人都可以帮助转换 maxdate 以便它可以用于与日期列进行比较吗?
【问题讨论】:
-
你的数据框 shema 是什么?
-
@EmiCareOfCell44 为问题添加了架构
标签: scala apache-spark apache-spark-sql