Преобразовать отметку времени Unix в отметку времени мс в PySpark - PullRequest
1 голос
/ 16 апреля 2020

У меня есть столбец в моем Dataframe timestamp , который содержит UNIX 13-di git timestamp следующим образом:

|   timestamp   | 
| ------------- |
| 1584528257638 |
| 1586618807677 |
| 1585923477767 |
| 1583314882085 |

С pandas это довольно легко чтобы преобразовать его следующим образом:

ms = pd.to_datetime(df[column], unit='ms')
df[column] = ms

Однако в pySpark это не так просто, и я нашел несколько других, таких как этот пост , пытающихся достичь этой цели. Конкатенация последних миллисекунд не работает для меня, она всегда дает вторую метку времени (ЧЧ: мм: сс) вместо ЧЧ: мм: сс.ССС.

То, что я до сих пор пробовал, было:

df = df.withColumn("unix_timestamp", F.unix_timestamp(df.timestamp,'yyyy-MM-dd HH:mm:ss.SSS z') + F.substring(df.timestamp, -3,3).cast('float')/1000)

df = df.withColumn("ms_Timestamp", F.to_timestamp(df["unix_timestamp"]))

К сожалению, это не преобразовало его в метку времени в миллисекундах, и я понятия не имею, что еще делать.

Буду признателен за любую помощь, чтобы наконец получить отметку времени в миллисекундах.

Всего наилучшего и заранее спасибо.

1 Ответ

2 голосов
/ 16 апреля 2020

По умолчанию to_timestamp, from_unixtime, unix_timestamp функции не будут приводить к миллисекундам.

Но для обходного пути используйте from_unixtime и concat функции чтобы получить метку времени с миллисекундами.

#using substring function
df.withColumn("unix_timestamp", concat_ws(".",from_unixtime(substring(col("timestamp"),0,10),"yyyy-MM-dd HH:mm:ss"),substring(col("timestamp"),-3,3))).show(10,False)

#using divide function
df.withColumn("unix_timestamp", concat_ws(".",from_unixtime((col("timestamp")/1000),"yyyy-MM-dd HH:mm:ss"),substring(col("timestamp"),-3,3))).show(10,False)
#+-------------+-----------------------+
#|timestamp    |unix_timestamp         |
#+-------------+-----------------------+
#|1584528257638|2020-03-18 05:44:17.638|
#|1586618807677|2020-04-11 10:26:47.677|
#|1585923477767|2020-04-03 09:17:57.767|
#|1583314882085|2020-03-04 03:41:22.085|
#+-------------+-----------------------+
...