Я не знаю pyspark, но если вы используете панд, это работает. (и pyspark может быть похожим):
1: создавать данные
import pandas as pd
import numpy as np
data = pd.DataFrame({
'id':[1, 2],
'start_tm': pd.date_range('2019-01-01 00:00', periods=2, freq='D'),
'end_dt': pd.date_range('2019-01-01 00:30', periods=2, freq='D')})
# pandas dataframe is similar to the data in pyspark
выводить
id start_tm end_dt
1 2019-01-01 2019-01-01 00:30:00
2 2019-01-02 2019-01-02 00:30:00
2: разбивать столбцы
period = np.timedelta64(5, 'm') # 5 minutes
idx = (data['end_dt'] - data['start_tm']) > period
while idx.any():
new_data = data[idx].copy()
new_data['start_tm'] = new_data['start_tm'] + period
data.loc[idx, 'end_dt'] = (data[idx]['start_tm'] + period).values
data = pd.concat([data, new_data], axis=0)
idx = (data['end_dt'] - data['start_tm']) > period
выход
id start_tm end_dt
1 2019-01-01 00:00:00 2019-01-01 00:05:00
2 2019-01-02 00:00:00 2019-01-02 00:05:00
1 2019-01-01 00:05:00 2019-01-01 00:10:00
2 2019-01-02 00:05:00 2019-01-02 00:10:00
1 2019-01-01 00:10:00 2019-01-01 00:15:00
2 2019-01-02 00:10:00 2019-01-02 00:15:00
1 2019-01-01 00:15:00 2019-01-01 00:20:00
2 2019-01-02 00:15:00 2019-01-02 00:20:00
1 2019-01-01 00:20:00 2019-01-01 00:25:00
2 2019-01-02 00:20:00 2019-01-02 00:25:00
1 2019-01-01 00:25:00 2019-01-01 00:30:00
2 2019-01-02 00:25:00 2019-01-02 00:30:00
Из стандарта C ++:
Исходный файл вместе со всеми заголовками и исходными файлами, включенными с помощью директивы предварительной обработки #include, за вычетом любой строки исходного текста, пропущенной какой-либо из директив предварительной обработки условного включения, является называется единицей перевода.
Единица перевода является основной единицей компиляции в C ++. Он содержит:
Один модуль перевода компилируется в объектный файл, библиотеку или исполняемую программу.
Исходный файл, напротив, является автономным файлом, как и любой другой файл в вашей файловой системе. После компиляции он может быть компонентом модуля перевода, как упомянуто выше.
«Единица перевода» - это исходный файл плюс все заголовки или другие исходные файлы, которые он # включает, плюс любые файлы, которые ОНИ включают, и так далее. Исходный файл - это всего лишь один исходный файл.
Если это помогает, считайте исходный файл «до» запуском препроцессора, а единицу перевода - «после». Или подумайте об этом как о работе препроцессора по превращению исходного файла в единицу перевода.