【问题标题】:Spark dataframe change column value to timestamp [duplicate]Spark数据框将列值更改为时间戳[重复]
【发布时间】:2018-09-19 19:14:51
【问题描述】:

我有一个已读入的 jsonl 文件,创建了一个临时表视图并过滤掉了我想要修改的记录。

val df = session.read.json("tiny.jsonl")
df.createOrReplaceTempView("tempTable")
val filter = df.select("*").where("field IS NOT NULL")

现在我正在尝试各种事情。我想在写回之前用 currentTimestamp 更改一个名为“时间”的列。有时我想将 currentTimestamp 更改为 timestampNow - 例如 5 天。

val change = test.withColumn("server_time", date_add(current_timestamp(), -1))

上面的示例将返回一个从今天开始 1 的日期,而不是时间戳。

编辑: 模拟我的 jsonl 输入的示例数据框:

  val df = Seq(
    (1, "fn", "2018-02-18T22:18:28.645Z"),
    (2, "fu", "2018-02-18T22:18:28.645Z"),
    (3, null, "2018-02-18T22:18:28.645Z")
  ).toDF("id", "field", "time")

预期输出:

+---+------+-------------------------+
| id|field |time                     |
+---+------+-------------------------+
|  1| fn   | 2018-04-09T22:18:28.645Z|
|  2| fn   | 2018-04-09T22:18:28.645Z|
+---+------+-------------------------+

【问题讨论】:

标签: scala apache-spark dataframe


【解决方案1】:

如果你想用当前的timestamp替换当前的columntime,你可以使用current_timestamp函数。添加天数可以使用SQL INTERVAL

val df = Seq(
  (1, "fn", "2018-02-18T22:18:28.645Z"),
  (2, "fu", "2018-02-18T22:18:28.645Z"),
  (3, null, "2018-02-18T22:18:28.645Z")
).toDF("id", "field", "time")
  .na.drop()

  val ddf  = df
    .withColumn("time", current_timestamp())
    .withColumn("newTime", $"time" + expr("INTERVAL 5 DAYS"))

输出:

+---+-----+-----------------------+-----------------------+
|id |field|time                   |newTime                |
+---+-----+-----------------------+-----------------------+
|1  |fn   |2018-04-10 15:14:27.501|2018-04-15 15:14:27.501|
|2  |fu   |2018-04-10 15:14:27.501|2018-04-15 15:14:27.501|
+---+-----+-----------------------+-----------------------+

【讨论】:

  • 您将如何修改 current_timestamp 以便我可以说从今天起 5 天?
  • 使用date_add函数添加当前天数
  • 就像我的例子一样?只是返回不同的日期而不是时间戳?
  • 我收到Value '$' is not a member of stringContext 错误?有什么想法吗?
  • 您是导入为import session.implicits._ 还是只使用col("time")
猜你喜欢
  • 2021-08-12
  • 1970-01-01
  • 2020-01-19
  • 2018-02-09
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多