В вашем коде много неясностей. Ниже заявление не меняет тип данных, оно инициализирует значение с сегодняшней датой (поэтому в этом случае нет вероятности получения данных с 2018 года)
SAlesByCountry2 = SAlesByCountry.withColumn("SaleDate", current_date())
Я вижу, что в вашем существующем dataframe
столбец SaleDate
имеет формат даты, отличный от формата даты current_date()
return. current_date()
формат даты возврата a yyyy-MM-dd
, но у вас есть данные с dd/MM/yyyy
, где год функция не работает.
scala> df.withColumn("SaleDate", current_date()).select(col("SaleDate")).show
+----------+
| SaleDate|
+----------+
|2019-09-30|
|2019-09-30|
|2019-09-30|
|2019-09-30|
|2019-09-30|
|2019-09-30|
+----------+
year
функцияработайте, когда у вас есть данные с форматом даты как yyyy-MM-dd
.
scala> df.withColumn("SaleDate", date_format(current_date(), "dd/MM/yyyy")).filter(year(col("SaleDate")) === "2019").select(col("SaleDate")).show()
+--------+
|SaleDate|
+--------+
+--------+
scala> df.withColumn("SaleDate", date_format(current_date(), "yyyy-MM-dd")).filter(year(col("SaleDate")) === "2019").select(col("SaleDate")).show
+----------+
| SaleDate|
+----------+
|2019-09-30|
|2019-09-30|
|2019-09-30|
|2019-09-30|
|2019-09-30|
|2019-09-30|
+----------+
Так что для решения вашей проблемы вам нужно изменить формат даты в столбце SaleDate
на yyyy-MM-dd
, как показано ниже, и подтвердить, что SaleDate
столбец имеет уникальный формат для всех строк.
df.withColumn("SaleDate" , date_format(to_date(col("SaleDate"), "dd/MM/yyyy"), "yyyy-MM-dd")).filter(year(col("SaleDate")) === "2018")