root
|-- address: string (nullable = true)
|-- attributes: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
|-- business_id: string (nullable = true)
|-- categories: string (nullable = true)
|-- city: string (nullable = true)
|-- hours: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
|-- is_open: long (nullable = true)
|-- latitude: double (nullable = true)
|-- longitude: double (nullable = true)
|-- name: string (nullable = true)
|-- postal_code: string (nullable = true)
|-- review_count: long (nullable = true)
|-- stars: double (nullable = true)
|-- state: string (nullable = true)
В настоящее время я работаю с набором данных Yelp, и моя цель — найти общее количество часов, в течение которых бизнес открыт в день/неделю. Из данных я могу извлечь временной диапазон для каждого дня, который выглядит как [9:0, 0:0] для определенного дня. Как я могу использовать pyspark для получения двух столбцов: один для часов работы, показывающий [9:0], и один для часов закрытия, показывающих [0:0]?
Это некоторый код, который я использовал, чтобы просто показать часы для бизнеса в наборе данных.
import pyspark.sql.functions as f
from pyspark.sql.functions import expr
df_hours = df_MappedBusiness.select(
"business_id",
"name",
f.explode("hours").alias("hourDay","hourValue"),
f.split("hourValue", "[-]").alias("split_hours")
).show(50, truncate=False)
Expected Output
---------------
+----------------------------------------------------------------
|hourDay |hourValue |split_hours | open_hours | close_hours
+-----------------------------------------------------------------
|Monday |9:0-0:0 |[9:0, 0:0] | [9,0] | [0,0] |