在Spark中将日期转换为月末

时间:2017-06-21 21:38:25

标签: pyspark spark-dataframe sparkr

我有一个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

3 个答案:

答案 0 :(得分:7)

您可以使用以下(PySpark):

from pyspark.sql.functions import last_day

df.select('name', last_day(df.dates).alias('dates')).show()

为了澄清,last_day(date)返回该日期所属月份的最后一天。

我很确定sparkR中有类似的功能 https://spark.apache.org/docs/1.6.2/api/R/last_day.html

答案 1 :(得分:3)

var text-to-speech = function(state) { const url = 'https://texttospeech.googleapis.com/v1beta1/text:synthesize?key=GOOGLE_API_KEY' const data = { 'input':{ 'text':'Android is a mobile operating system developed by Google, based on the Linux kernel and designed primarily for touchscreen mobile devices such as smartphones and tablets.' }, 'voice':{ 'languageCode':'en-gb', 'name':'en-GB-Standard-A', 'ssmlGender':'FEMALE' }, 'audioConfig':{ 'audioEncoding':'MP3' } }; const otherparam={ headers:{ "content-type":"application/json; charset=UTF-8" }, body:JSON.stringify(data), method:"POST" }; fetch(url,otherparam) .then(data=>{return data.json()}) .then(res=>{console.log(res.audioContent); }) .catch(error=>{console.log(error);state.onError(error)}) }; 是一个命名不当的函数,应该用更具描述性的内容包装起来,以使代码更易于阅读。

last_day 是一个更好的函数名。以下是如何通过 Scala API 使用此函数。假设您有以下数据:

endOfMonth

运行 spark-daria 中的 +----------+ | some_date| +----------+ |2016-09-10| |2020-01-01| |2016-01-10| | null| +----------+ 函数:

endOfMonth

结果如下:

import com.github.mrpowers.spark.daria.sql.functions._

df.withColumn("res", endOfMonth(col("some_date"))).show()

我也会尝试将此函数添加到 quinn,以便 PySpark 用户也可以轻松访问该函数。

答案 2 :(得分:0)

为了完整性,这里是SparkR代码:

df <- withColumn(df, 'dates', last_day(df$dates))
相关问题