Spark sql字符串到时间戳缺少毫秒

2024-02-09

Why is:

import spark.implicits._
  val content = Seq(("2019", "09", "11","17","16","54","762000000")).toDF("year", "month", "day", "hour", "minute", "second", "nano")
  content.printSchema
  content.show
  content.withColumn("event_time_utc", to_timestamp(concat('year, 'month, 'day, 'hour, 'minute, 'second), "yyyyMMddHHmmss"))
    .withColumn("event_time_utc_millis", to_timestamp(concat('year, 'month, 'day, 'hour, 'minute, 'second, substring('nano, 0, 3)), "yyyyMMddHHmmssSSS"))
    .select('year, 'month, 'day, 'hour, 'minute, 'second, 'nano,substring('nano, 0, 3), 'event_time_utc, 'event_time_utc_millis)
    .show

缺少毫秒?

+----+-----+---+----+------+------+---------+---------------------+-------------------+---------------------+
|year|month|day|hour|minute|second|     nano|substring(nano, 0, 3)|     event_time_utc|event_time_utc_millis|
+----+-----+---+----+------+------+---------+---------------------+-------------------+---------------------+
|2019|   09| 11|  17|    16|    54|762000000|                  762|2019-09-11 17:16:54|  2019-09-11 17:16:54|
+----+-----+---+----+------+------+---------+---------------------+-------------------+---------------------+

对于格式字符串:yyyyMMddHHmmssSSS其中应包括毫秒SSS如果我没有记错的话。


我也遇到过类似的问题,官方Document https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/sql/functions.html#to_timestamp-org.apache.spark.sql.Column-java.lang.String-下线说直到火花:

将时间字符串转换为 Unix 时间戳(很快)与指定的 格式(参见 [http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html] http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html%5D) 转为 Unix 时间戳(很快),如果失败则返回null。

这意味着它只处理秒。

火花>= 2.4 https://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/functions.html#to_timestamp-org.apache.spark.sql.Column-java.lang.String-可以处理SSS以及。

解决方案: Below UDF将有助于处理这种情况:

import java.text.SimpleDateFormat
import java.sql.Timestamp
import org.apache.spark.sql.functions._
import scala.util.{Try, Success, Failure}

val getTimestampWithMilis: ((String , String) => Option[Timestamp]) = (input, frmt) => input match {
  case "" => None
  case _ => {
    val format = new SimpleDateFormat(frmt)
    Try(new Timestamp(format.parse(input).getTime)) match {
      case Success(t) => Some(t)
      case Failure(_) => None
    }    
  }
}

val getTimestampWithMilisUDF = udf(getTimestampWithMilis)

对于你的例子:

val content = Seq(("2019", "09", "11","17","16","54","762000000")).toDF("year", "month", "day", "hour", "minute", "second", "nano")
val df = content.withColumn("event_time_utc", concat('year, 'month, 'day, 'hour, 'minute, 'second, substring('nano, 0, 3)))
df.show
+----+-----+---+----+------+------+---------+-----------------+
|year|month|day|hour|minute|second|     nano|   event_time_utc|
+----+-----+---+----+------+------+---------+-----------------+
|2019|   09| 11|  17|    16|    54|762000000|20190911171654762|
+----+-----+---+----+------+------+---------+-----------------+

df.withColumn("event_time_utc_millis", getTimestampWithMilisUDF($"event_time_utc", lit("yyyyMMddHHmmssSSS"))).show(1, false)
+----+-----+---+----+------+------+---------+-----------------+-----------------------+
|year|month|day|hour|minute|second|nano     |event_time_utc   |event_time_utc_millis  |
+----+-----+---+----+------+------+---------+-----------------+-----------------------+
|2019|09   |11 |17  |16    |54    |762000000|20190911171654762|2019-09-11 17:16:54.762|
+----+-----+---+----+------+------+---------+-----------------+-----------------------+

root
 |-- year: string (nullable = true)
 |-- month: string (nullable = true)
 |-- day: string (nullable = true)
 |-- hour: string (nullable = true)
 |-- minute: string (nullable = true)
 |-- second: string (nullable = true)
 |-- nano: string (nullable = true)
 |-- event_time_utc: string (nullable = true)
 |-- event_time_utc_millis: timestamp (nullable = true)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark sql字符串到时间戳缺少毫秒 的相关文章

随机推荐

  • C 中的“CALLBACK”声明有什么作用?

    我正在查看一些代码SDL http www libsdl org库并遇到了这样声明的函数 LRESULT CALLBACK WndProc HWND hwnd UINT msg WPARAM wParam LPARAM lParam 现在
  • Apigee - 配置 API 代理时出现问题

    我正在寻找一种方法将客户的 WCF 服务公开为 REST 服务 并创建所有安全堆栈以支持声明 oauth 身份验证和授权 我正在研究两种不同的方法来做到这一点 创建一个新的 REST 服务 它将充当代理 将我的 WCF 服务公开为 REST
  • 使用 PHP 根据 Schematron 验证 XML

    有很多关于 Schematront 的资源 但是我找不到任何相关内容或有关如何根据 Schematront sch 文件验证 xml 的示例 Anyone 我已经发现 1 或 2 个非常旧的类会返回错误 所以如果有人知道如何做到这一点 请提
  • Google Play 服务过期错误

    我的 google play service 有问题 我正在使用 Google API 进行 oAuth2 身份验证和日历 Gmail 信息 昨天一切正常 但今天他告诉我 我需要更新版本的 Google PLay 服务 Android St
  • 客户我的帐户订单历史记录中不显示自定义订单状态

    在 WooCommerce 中 我制作了 2 个自定义订单状态 第一个是 运输状态 另一个是 批准状态 在我将一些订单状态更改为这两个新状态 分别是shipping or approved 客户无法在其订单历史记录页面查看此订单 这是我的代
  • git merge --strategy 与 --strategy-option

    git merge 选项有什么区别 strategy option short X and strategy short s 有很多关于合并策略 https stackoverflow com questions 366860 when w
  • switch 因被 JSHint 忽略而失败

    我正在运行我的代码JSHint http www jshint com 我遇到了这个错误 预计break之前的声明case 在这段代码中 switch true Renames skill1 abc to section 8 1 body
  • 如何向远程服务器添加 ssh 密钥? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 在我的 VPS 中 运行ssh add l它返回 The agent has no identities 但我已经跑了cat ssh
  • 如何在 Ruby 中删除字符串中的最后一个元音?

    如何定义字符串中的最后一个元音 例如 我有一个词 经典 我想找到单词 class 的最后一个元音ic 是字母 i 并删除最后一个元音 我在想 def vowel str result new str split i new length 1
  • 解决方法:汇总下游测试结果

    据我所知 聚合下游测试结果 功能并没有按预期工作 并且很难找到有用的文档 我想实现非常相似的功能 Job Build触发工作T1 T2并行 其中T1FindBugs T2PMD 场景一 立刻T1 and T2已完成 我可以使用 加入 插件来
  • 如何使用参数传递对函数的引用? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在 JavaScript 函数调用中预先设置参数 部分功能应用 https stackoverflow com questions 321113 how can i pre set argumen
  • 微服务依赖管理 - 治理还是领域驱动设计?

    背景 由于长期的单体式痛苦 一家采用联邦模式的国际公司正在转型为微服务 能够快速部署的自治团队是非常理想的 尽管理论上如此 但服务确实相互依赖以获得更高的功能 但它们是自治的 独立开发和部署 由于这是联邦模式和分散控制 我们不能像联合国那样
  • Java 安全管理器会降低性能吗?

    实施 Java 安全管理器是否会导致性能下降 这完全取决于实现的细节以及应用程序 当然有可能实现一个需要很长时间来检查某些权限的安全管理器 以及一个需要非常频繁地检查这些权限的应用程序 从而导致可怕的性能 但通常情况下 检查权限的频率不足以
  • 在 Firebase 数据库模拟器中模拟更新

    我的问题很简单 我不知道如何在 Firebase Simulator 中模拟多个更新 由于我什至不知道如何开始 所以我无法提供任何代码 任何指导都会非常有帮助 目前无法在 Firebase 数据库安全规则模拟器中执行多位置更新 拥有该功能就
  • OS X 上的 ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:747)

    我正在尝试这段代码 import pandas as pd fiddy states pd read html https simple wikipedia org wiki List of U S states print fiddy s
  • 所有编译时常量都是内联的吗?

    假设我有一堂这样的课 class ApplicationDefs public static final String configOption1 some option public static final String configO
  • 使用 django 和 xgettext 进行本地化

    我正在翻译我的网站 但是当我尝试运行命令时 manage py makemessages locale bs 我不断收到如下错误 CommandError errors happened while running xgettext on
  • 将图像添加到 pandas DataFrame

    假设我有一个 DataFrame 我想导出为 PDF 在数据框中 我有以下列 代码 名称 价格 净值 销售额 每一行都是一个产品 我想向该 DataFrame 中的每个产品添加一个我可以使用 BeautifulSoup 获得的图像 有什么方
  • 网页设计:“向下滚动导航”

    某些网络应用程序中使用的技术是什么 例如http www alfredapp com http www alfredapp com导航在哪里向下滚动网站以显示另一个网站 为了获得这种导航方式 我会将所有内容放在一个页面上并使用 平滑滚动效果
  • Spark sql字符串到时间戳缺少毫秒

    Why is import spark implicits val content Seq 2019 09 11 17 16 54 762000000 toDF year month day hour minute second nano