gpt4 book ai didi

python - 如何使用 SQL 从秒列创建日期和小时列

转载 作者:行者123 更新时间:2023-11-28 22:08:29 24 4
gpt4 key购买 nike

我有一个名为 Time 的列,其浮点值给出了第一个事件发生后的时间(以秒为单位)。我想知道如何在 SQL 中使用此列创建名为 DateHour 的列。

我的数据集很大,我不能使用 Pandas。

设置

import numpy as np
import pandas as pd

import pyspark
from pyspark.sql.functions import col
from pyspark.sql.functions import udf # @udf("integer") def myfunc(x,y): return x - y
from pyspark.sql import functions as F # stddev format_number date_format, dayofyear, when


spark = pyspark.sql.SparkSession.builder.appName('bhishan').getOrCreate()

数据

%%bash

cat > data.csv << EOL
Time
10.0
61.0
3500.00
3600.00
3700.54
7000.22
7200.22
15000.55
86400.22
EOL

pyspark 数据框

df = spark.read.csv('data.csv', header=True, inferSchema=True)
print('nrows = ', df.count(), 'ncols = ', len(df.columns))
df.show()
nrows = 9 ncols = 1
+--------+
| Time|
+--------+
| 10.0|
| 61.0|
| 3500.0|
| 3600.0|
| 3700.54|
| 7000.22|
| 7200.22|
|15000.55|
|86400.22|
+--------+

使用 Pandas (但我需要pyspark)

pandas_df = df.toPandas()
pandas_df['Date'] = pd.to_datetime('2019-01-01') + pd.to_timedelta(pandas_df['Time'],unit='s')

pandas_df['hour'] = pandas_df['Date'].dt.hour
print(pandas_df)
Time Date hour
0 10.00 2019-01-01 00:00:10.000 0
1 61.00 2019-01-01 00:01:01.000 0
2 3500.00 2019-01-01 00:58:20.000 0
3 3600.00 2019-01-01 01:00:00.000 1
4 3700.54 2019-01-01 01:01:40.540 1
5 7000.22 2019-01-01 01:56:40.220 1
6 7200.22 2019-01-01 02:00:00.220 2
7 15000.55 2019-01-01 04:10:00.550 4
8 86400.22 2019-01-02 00:00:00.220 0

问题

如何使用 SQL 和 Pyspark 获取新列 DateHour,就像我刚刚在 pandas 中所做的那样。我有不能使用 pandas 的大数据,为此我必须使用 pyspark。谢谢。

最佳答案

您可以使用函数:timestamp , unix_timestamphour :

from pyspark.sql.functions import expr, hour

df.withColumn('Date', expr("timestamp(unix_timestamp('2019-01-01 00:00:00') + Time)")) \
.withColumn('hour', hour('Date')) \
.show(truncate=False)

+--------+----------------------+----+
|Time |Date |hour|
+--------+----------------------+----+
|10.0 |2019-01-01 00:00:10 |0 |
|61.0 |2019-01-01 00:01:01 |0 |
|3500.0 |2019-01-01 00:58:20 |0 |
|3600.0 |2019-01-01 01:00:00 |1 |
|3700.54 |2019-01-01 01:01:40.54|1 |
|7000.22 |2019-01-01 01:56:40.22|1 |
|7200.22 |2019-01-01 02:00:00.22|2 |
|15000.55|2019-01-01 04:10:00.55|4 |
|86400.22|2019-01-02 00:00:00.22|0 |
+--------+----------------------+----+

注意:使用时间戳函数保持微秒

使用 SQL 语法:

df.createOrReplaceTempView('t_df')

spark.sql("""
WITH d AS (SELECT *, timestamp(unix_timestamp('2019-01-01 00:00:00') + Time) as Date FROM t_df)
SELECT *, hour(d.Date) AS hour FROM d
""").show(truncate=False)

关于python - 如何使用 SQL 从秒列创建日期和小时列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com