繁体   English   中英

使用 databricks 中的 pyspark 将纳秒值转换为日期时间

[英]convert nanosecond value into datetime using pyspark in databricks

我正在尝试使用 Databricks 重新创建我已经在 Python 中完成的一些工作。 我有一个数据框,其中有一个名为“时间”的列,数据以纳秒为单位。 在 Python 中,我使用以下代码将字段转换为适当的日期时间值:

import pandas as pd

# Convert time field from nanoseconds into datetime
df["time"] = pd.to_datetime(df["time"], unit='ns')

此代码将以下值 1642778070000000000 转换为 2022-01-21 15:14:30。 我现在想使用 pyspark 在数据块中执行此操作(因为我正在扩大问题并且我使用的数据集太大而无法在 Python 中执行)。 我创建了一个名为 df 的 spark 数据框,然后导入了 pyspark.pandas 函数,然后有效地尝试了相同的代码,但它不起作用:

from pyspark import pandas as ps
df = df.ps.to_datetime(df.columns[2], unit='ns') #the time column is in column index 2

我收到一个错误:

'DataFrame' 对象没有属性 'ps'

有什么建议么?

有什么建议么?

Pyspark 不提供任何直接函数来处理以纳秒为单位的时间。 有一个名为from_unixtime()的函数,它需要以为单位的时间作为参数,并将其转换为格式为yyyy-MM-dd hh:mm:ss的时间戳(您的要求)。 因此,要使用此功能,我们必须使用 Pyspark 手动将这些纳秒转换为秒。

以下是我在示例数据上使用的代码演示:

  • 以下是我的数据框df中的架构和示例数据。

在此处输入图像描述

  • 要将纳秒转换为秒,请使用以下代码。
from pyspark.sql.functions import *

df = df.withColumn("seconds", (col('nanoseconds')/1000000000)) 
df.show() 

+---+-------------------+--------------------+
| id|        nanoseconds|             seconds|
+---+-------------------+--------------------+
|  1|1642778070000000000|        1.64277807E9|
|  2|1360287003083912345|1.3602870030839124E9|
+---+-------------------+--------------------+
  • 现在我们有了 double 类型的seconds列。 现在您可以使用from_unixtime()并将seconds列作为参数传递,如下所示。
df = df.withColumn("date_time",from_unixtime(col('seconds'))) 
df.show() 

+---+-------------------+--------------------+-------------------+
| id|        nanoseconds|             seconds|          date_time|
+---+-------------------+--------------------+-------------------+
|  1|1642778070000000000|        1.64277807E9|2022-01-21 15:14:30|
|  2|1360287003083912345|1.3602870030839124E9|2013-02-08 01:30:03|
+---+-------------------+--------------------+-------------------+

在此处输入图像描述

现在您有一个StringTypedate_time列,其中包含相应纳秒的值作为时间戳,格式为yyyy-MM-dd hh:mm:ss

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM