我在数据框中有一个字段,当前格式化为字符串(mm / dd / yyyy),我想在该数据框中创建一个新列,其中包含该字段的星期名称(即星期四)。我已导入
import com.github.nscala_time.time.Imports._
但我不确定从哪里开始。
答案 0 :(得分:13)
创建格式化程序:
redBox.physicsBody.restitution
解析日期:
val fmt = DateTimeFormat.forPattern("MM/dd/yyyy")
获取一周中的某一天:
val dt = fmt.parseDateTime("09/11/2015")
使用dt.toString("EEEEE")
换行,您就拥有了完整的解决方案。仍然没有必要,因为org.apache.spark.sql.functions.udf
已经提供了所有必需的UDF:
HiveContext
修改强>:
自Spark 1.5起,您可以直接使用val df = sc.parallelize(Seq(
Tuple1("08/11/2015"), Tuple1("09/11/2015"), Tuple1("09/12/2015")
)).toDF("date_string")
df.registerTempTable("df")
sqlContext.sql(
"""SELECT date_string,
from_unixtime(unix_timestamp(date_string,'MM/dd/yyyy'), 'EEEEE') AS dow
FROM df"""
).show
// +-----------+--------+
// |date_string| dow|
// +-----------+--------+
// | 08/11/2015| Tuesday|
// | 09/11/2015| Friday|
// | 09/12/2015|Saturday|
// +-----------+--------+
,from_unixtime
函数:
unix_timestamp