【问题标题】:Convert String to DataFrame using Spark/scala使用 Spark/scala 将字符串转换为 DataFrame
【发布时间】:2020-03-29 16:45:36
【问题描述】:

我想将字符串列转换为时间戳列,但它总是返回空值。

  val t = unix_timestamp(col("tracking_time"),"MM/dd/yyyy").cast("timestamp")
   val df=   df2.withColumn("ts", t)

有什么想法吗?

谢谢。

【问题讨论】:

  • 能否为tracking_time 列添加示例数据?

标签: scala apache-spark


【解决方案1】:

确保您的String column 与指定的MM/dd/yyyy 格式匹配。

  • 如果不匹配,则返回null

Example:

val df2=Seq(("12/12/2020")).toDF("tracking_time")
val t = unix_timestamp(col("tracking_time"),"MM/dd/yyyy").cast("timestamp")

df2.withColumn("ts", t).show()
//+-------------+-------------------+
//|tracking_time|                 ts|
//+-------------+-------------------+
//|   12/12/2020|2020-12-12 00:00:00|
//+-------------+-------------------+

df2.withColumn("ts",unix_timestamp(col("tracking_time"),"MM/dd/yyyy").cast("timestamp")).show()
//+-------------+-------------------+
//|tracking_time|                 ts|
//+-------------+-------------------+
//|   12/12/2020|2020-12-12 00:00:00|
//+-------------+-------------------+
//(or)  by using to_timestamp function.

df2.withColumn("ts",to_timestamp(col("tracking_time"),"MM/dd/yyyy")).show()
//+-------------+-------------------+
//|tracking_time|                 ts|
//+-------------+-------------------+
//|   12/12/2020|2020-12-12 00:00:00|
//+-------------+-------------------+

【讨论】:

  • 这是因为日期格式,与指定格式不兼容。谢谢@舒
【解决方案2】:

正如@Shu 提到的,原因可能是tracking_time 列的格式无效。值得一提的是,Spark 正在寻找模式作为列值的前缀。研究这些例子以获得更好的直觉

Seq(
  "03/29/2020 00:00",
  "03/29/2020",
  "00:00 03/29/2020",
  "03/29/2020somethingsomething"
).toDF("tracking_time")
  .withColumn("ts", unix_timestamp(col("tracking_time"), "MM/dd/yyyy").cast("timestamp"))
  .show()
//+--------------------+-------------------+
//|       tracking_time|                 ts|
//+--------------------+-------------------+
//|    03/29/2020 00:00|2020-03-29 00:00:00|
//|          03/29/2020|2020-03-29 00:00:00|
//|    00:00 03/29/2020|               null|
//|03/29/2020somethi...|2020-03-29 00:00:00|

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2015-11-16
    • 2023-04-05
    相关资源
    最近更新 更多