如何根据数据框中的另一个星期添加一个新的列?

时间:2015-09-11 01:50:50

标签: scala apache-spark nscala-time

我在数据框中有一个字段,当前格式化为字符串(mm / dd / yyyy),我想在该数据框中创建一个新列,其中包含该字段的星期名称(即星期四)。我已导入

import com.github.nscala_time.time.Imports._

但我不确定从哪里开始。

1 个答案:

答案 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