apache-spark - 时间戳转换使值 null
问题描述
当将列数据类型从字符串转换为时间戳时,值变为空。
我有以下格式的值
20070811T00789.167861+0100
当我执行以下操作时,我想将类型转换为“时间戳”
df.withColumn('arrivetime', df['arrivetime'].cast('timestamp'))
价值正在成为null
。如何在不影响值及其格式的情况下将列转换为时间戳?
解决方案
我不确切知道您要使用 5 位时间和最后的 6 位(纳秒?)格式,但知道 Spark 中的时间戳是毫秒,而不是纳秒,所以您会丢失信息。
话虽如此,您可以使用 Spark 的unix_timestamp
方法使用SimpleDateFormat
语法将字符串转换为时间戳。
首先,您可能必须使用 Spark 删除时间戳的最后 3 位数字regexp_replace
在 Scala 中,它看起来像:
regexp_replace(df("arrivetime"), """(\.\d{3})\d*""", """$1""")
然后你可以这样使用unix_timestamp
:
unix_timestamp([replaced string], "yyyyMMdd'T'HHmmss.SSSz")
推荐阅读
- programming-languages - 影响编程风格的因素
- angular - Why switchMap does not cancel repeated request?
- android - 无法在使用 R 类(Kotlin)的 android studio 中通过 id 找到 EditText 资源
- javascript - React 中的三个.js - 缺少三个.ShaderTerrain
- java - 如何从作为参数传递给Java函数的类中访问静态字段?
- javascript - 如何使用 React JS 在 Puppeteer 中呈现 amcharts 并创建 PDF?
- routes - 在 nopcommerce 测试版 4.3 中覆盖通用路由
- angularjs - 使用日期管道更改 mat-date-picker 的日期格式
- django - 我正在尝试使用从 CoinMarketCap API 提取的数据,我无法访问字典中的所有信息
- javascript - JavaScript 数据转换成 HTML