我目前正在使用 Yelp 的数据集,我的目标是找出企业每周营业的总时间。从数据中,我能够提取每天的时间范围,例如某一天的“9:0-0:0”或“17:30-21:30”。如何使用 SQL 获取这些每小时范围的单个值?
这是我用来简单显示数据集中企业营业时间的一些代码。
df_busSelected = df_business.select("business_id", "name"
, "hours.Sunday", "hours.Monday", "hours.Tuesday"
,"hours.Wednesday", "hours.Thursday", "hours.Friday"
, "hours.Saturday")
df_busSelected.show()
我希望制作一个新专栏,其中包含给定范围内企业每周营业的总小时数。
最佳答案
使用 pyspark,您可以执行以下操作:
from pyspark.sql.functions import expr
df.withColumn('h', expr('split(hours, "[-:]")').astype('array<int>')) \
.withColumn('h1', expr('''
h[2] - h[0] + IF(h[2]<h[0],24,0) + round((h[3]-h[1])/60,0)
''').astype('int')) \
.show()
+----------+-----------+----------------+---+
| bdate| hours| h| h1|
+----------+-----------+----------------+---+
|2019-10-17| 9:0-0:0| [9, 0, 0, 0]| 15|
|2019-10-18|17:30-21:30|[17, 30, 21, 30]| 4|
+----------+-----------+----------------+---+
首先使用字符集[-:]
将hours
列拆分为包含4个项目的数组(名为h
)并进行转换转换为 int
数组(最初为 StringType 数组)
然后进行简单的数学运算,最后再次将结果类型转换为 int
。
接下来,使用 date_format('bdate', 'EEEE')
获取周名称,然后使用 groupby
和 pivot
以及可能 agg
+ sum
函数得到最终结果
关于mysql - 如何使用 SQL 将小时范围转换为总小时数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441790/