在 Spark 中将日期转换为月末
Convert date to end of month in Spark
我有一个如下所示的 Spark DataFrame:
#Create DataFrame
df <- data.frame(name = c("Thomas", "William", "Bill", "John"),
dates = c('2017-01-05', '2017-02-23', '2017-03-16', '2017-04-08'))
df <- createDataFrame(df)
#Make sure df$dates column is in 'date' format
df <- withColumn(df, 'dates', cast(df$dates, 'date'))
name | dates
--------------------
Thomas |2017-01-05
William |2017-02-23
Bill |2017-03-16
John |2017-04-08
我想将 dates
更改为月末日期,因此它们看起来如下所示。我该怎么做呢? SparkR 或 PySpark 代码都可以。
name | dates
--------------------
Thomas |2017-01-31
William |2017-02-28
Bill |2017-03-31
John |2017-04-30
您可以使用以下 (PySpark):
from pyspark.sql.functions import last_day
df.select('name', last_day(df.dates).alias('dates')).show()
澄清一下,last_day(date)
returns 日期所属月份的最后一天。
我很确定sparkR中有类似的功能
https://spark.apache.org/docs/1.6.2/api/R/last_day.html
为了完整起见,这里是 SparkR 代码:
df <- withColumn(df, 'dates', last_day(df$dates))
last_day
是一个命名不当的函数,应该包含在更具描述性的内容中,以使代码更易于阅读。
endOfMonth
是一个更好的函数名。下面介绍如何在 Scala API 中使用此函数。假设您有以下数据:
+----------+
| some_date|
+----------+
|2016-09-10|
|2020-01-01|
|2016-01-10|
| null|
+----------+
运行 endOfMonth
函数是 spark-daria 的一部分:
import com.github.mrpowers.spark.daria.sql.functions._
df.withColumn("res", endOfMonth(col("some_date"))).show()
结果如下:
+----------+----------+
| some_date| res|
+----------+----------+
|2016-09-10|2016-09-30|
|2020-01-01|2020-01-31|
|2016-01-10|2016-01-31|
| null| null|
+----------+----------+
我也会尝试将此功能添加到 quinn,以便 PySpark 用户也能轻松访问该功能。
我有一个如下所示的 Spark DataFrame:
#Create DataFrame
df <- data.frame(name = c("Thomas", "William", "Bill", "John"),
dates = c('2017-01-05', '2017-02-23', '2017-03-16', '2017-04-08'))
df <- createDataFrame(df)
#Make sure df$dates column is in 'date' format
df <- withColumn(df, 'dates', cast(df$dates, 'date'))
name | dates
--------------------
Thomas |2017-01-05
William |2017-02-23
Bill |2017-03-16
John |2017-04-08
我想将 dates
更改为月末日期,因此它们看起来如下所示。我该怎么做呢? SparkR 或 PySpark 代码都可以。
name | dates
--------------------
Thomas |2017-01-31
William |2017-02-28
Bill |2017-03-31
John |2017-04-30
您可以使用以下 (PySpark):
from pyspark.sql.functions import last_day
df.select('name', last_day(df.dates).alias('dates')).show()
澄清一下,last_day(date)
returns 日期所属月份的最后一天。
我很确定sparkR中有类似的功能 https://spark.apache.org/docs/1.6.2/api/R/last_day.html
为了完整起见,这里是 SparkR 代码:
df <- withColumn(df, 'dates', last_day(df$dates))
last_day
是一个命名不当的函数,应该包含在更具描述性的内容中,以使代码更易于阅读。
endOfMonth
是一个更好的函数名。下面介绍如何在 Scala API 中使用此函数。假设您有以下数据:
+----------+
| some_date|
+----------+
|2016-09-10|
|2020-01-01|
|2016-01-10|
| null|
+----------+
运行 endOfMonth
函数是 spark-daria 的一部分:
import com.github.mrpowers.spark.daria.sql.functions._
df.withColumn("res", endOfMonth(col("some_date"))).show()
结果如下:
+----------+----------+
| some_date| res|
+----------+----------+
|2016-09-10|2016-09-30|
|2020-01-01|2020-01-31|
|2016-01-10|2016-01-31|
| null| null|
+----------+----------+
我也会尝试将此功能添加到 quinn,以便 PySpark 用户也能轻松访问该功能。