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

How to add a new column with day of week based on another in dataframe?

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

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

但我不确定从这里到哪里去。

创建格式化程序:

val fmt = DateTimeFormat.forPattern("MM/dd/yyyy")

解析日期:

val dt = fmt.parseDateTime("09/11/2015")

获取星期几:

dt.toString("EEEEE")

使用 org.apache.spark.sql.functions.udf 包装它,您就有了一个完整的解决方案。仍然没有必要,因为 HiveContext 已经提供了所有必需的 UDF:

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|
// +-----------+--------+

编辑:

从 Spark 1.5 开始,您可以直接使用 from_unixtimeunix_timestamp 函数:

import org.apache.spark.sql.functions.{from_unixtime, unix_timestamp}

df.select(from_unixtime(
  unix_timestamp($"date_string", "MM/dd/yyyy"), "EEEEE").alias("dow"))