![](/img/trans.png)
[英]How do I convert a 100 nanosecond Gregorian bigint value to a datetime in Python?
[英]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|
+---+-------------------+--------------------+
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|
+---+-------------------+--------------------+-------------------+
現在您有一個StringType
的date_time
列,其中包含相應納秒的值作為時間戳,格式為yyyy-MM-dd hh:mm:ss
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.