Я закончил с логикой для моего фрейма данных Pyspark и теперь должен применить разные входные данные и объединить результаты.
Мне интересно, есть ли какой-либо выигрыш в производительности для создания UDF и его многократного вызова, в отличие от циклического перебора значений, как показано ниже.
### res_schema definition ###
twr = []
twr.append((330,900,900,18900,1))
twr.append((480,900,1800,27000,2))
twr.append((660,900,3600,36000,4))
twr.append((1440,0,25200,43200,1))
twr.append((10080,0,86400,259200,1))
results = []
for tup in twr:
I = tup[0]
R = tup[1]
SR = tup[2]
SW = tup[3]
NR = tup[4]
res = spark.sql(
"""
SELECT *, LAST_VALUE(offdate) OVER (
PARTITION BY name
ORDER BY CAST(ondate AS timestamp)
RANGE BETWEEN CURRENT ROW AND INTERVAL {0} MINUTES FOLLOWING
) AS ld, SUM(works) OVER (
PARTITION BY name
ORDER BY CAST(ondate AS timestamp)
RANGE BETWEEN CURRENT ROW AND INTERVAL {0} MINUTES FOLLOWING
) AS ws
FROM lc
""".format(I))
for r in res:
results.append(r)
### More logic ###
resdf = spark.createDataFrame(results, res_schema)
Моя дополнительная логика обширна, но все еще полностью поддерживает sql, поэтому я не уверен, что мое медленное выполнение связано с запросами или циклом for.