sal*_*vyp 2 scala apache-spark nscala-time
我在数据框中有一个字段,当前格式化为字符串(mm/dd/yyyy),我想在该数据框中创建一个新列,该字段具有该字段的星期名称(即星期四).我已经进口了
import com.github.nscala_time.time.Imports._
Run Code Online (Sandbox Code Playgroud)
但我不知道从哪里开始.
zer*_*323 13
创建格式化程序:
val fmt = DateTimeFormat.forPattern("MM/dd/yyyy")
Run Code Online (Sandbox Code Playgroud)
解析日期:
val dt = fmt.parseDateTime("09/11/2015")
Run Code Online (Sandbox Code Playgroud)
获得一周中的一天:
dt.toString("EEEEE")
Run Code Online (Sandbox Code Playgroud)
使用它包装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|
// +-----------+--------+
Run Code Online (Sandbox Code Playgroud)
编辑:
从Spark 1.5开始,你可以使用from_unixtime,unix_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"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5417 次 |
| 最近记录: |