【问题标题】:Combine data string & time string合并数据字符串和时间字符串
【发布时间】:2018-12-11 20:22:32
【问题描述】:

你会怎么做? Databricks 4.1、Spark 2.3

您将获得一个两列数据框: 1) ‘dt’,字符串,如图。 2) ‘tm’字符串,如图所示。 我为这篇文章添加了第三列。

您的工作是创建第 3 列,“dttm”、时间戳、格式。前导零、精度和时区不如正确组合“dt”和“tm”的 id 重要。

我在这篇文章中使用了 PySpark,但我还没有结婚。

df1 = sqlContext.createDataFrame(
  [
     ('2018-06-02T00:00:00','12:30:00 AM', '06-02-2018 00:30:00.000+0000')
    ,('2018-11-15T00:00:00','03:00:00 AM', '11-15-2018 03:00:00.000+0000')
    ,('2018-06-02T00:00:00','10:30:00 AM', '06-02-2018 10:30:00.000+0000')
    ,('2018-06-02T00:00:00','12:30:00 PM', '06-02-2018 12:30:00.000+0000')
    ,('2018-11-15T00:00:00','03:00:00 PM', '11-15-2018 15:00:00.000+0000')
    ,('2018-06-02T00:00:00','10:30:00 PM', '06-02-2018 22:30:00.000+0000')
  ]
  ,['dt', 'tm', 'desiredCalculatedResult']
)

我已经经历了几十个例子和几十个尝试,到目前为止我还没有找到最终可行的解决方案。

【问题讨论】:

    标签: dataframe databricks azure-databricks


    【解决方案1】:

    您可以在“T”处拆分您的日期字符串以仅提取日期部分,然后您可以将其与时间字符串结合以获得代表您要创建的实际时间戳的字符串。然后只需将其转换为正确的格式即可。

    from pyspark.sql.functions import concat, split, lit, from_unixtime, unix_timestamp
    
    dt_tm = concat(split(df1.dt, "T")[0], lit(" "), df1.tm)
    df1 = df1.withColumn("dttm", from_unixtime(unix_timestamp(dt_tm, 'yyyy-MM-dd hh:mm:ss a')).cast("timestamp")) 
    

    【讨论】:

    • 干得好。甚至可以使用我忘记包含在示例数据框中的无空值。
    【解决方案2】:

    请看built-in functions

    你想看:

    date_format
    to_timestamp
    unix_timestamp
    from_utc_timestamp
    

    这些或其他 DateTime 函数的组合将实现您的目标。 Spark 2.x 对操作日期时间有强大的支持,但是,如果您真的无法使用内置函数完成它,您可以随时回退到 Joda Time Java 包。

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多