簡體   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