鑑於以下PySpark數據幀如何從Pyspark中的日期列中減去一列天數?
df = sqlContext.createDataFrame([('2015-01-15', 10),
('2015-02-15', 5)],
('date_col', 'days_col'))
如何能在天塔從日期列減去?在這個例子中,結果列應該是['2015-01-05', '2015-02-10']
。
我看着pyspark.sql.functions.date_sub()
,但它需要日期欄和一天,即date_sub(df['date_col'], 10)
。理想情況下,我寧願做date_sub(df['date_col'], df['days_col'])
。
我還試圖建立一個UDF:
from datetime import timedelta
def subtract_date(start_date, days_to_subtract):
return start_date - timedelta(days_to_subtract)
subtract_date_udf = udf(subtract_date, DateType())
df.withColumn('subtracted_dates', subtract_date_udf(df['date_col'], df['days_col'])
這種技術上的工作,但我看過的火花和Python之間步進可能會導致大型數據集的性能問題。我現在可以堅持使用這個解決方案(不需要過早優化),但是我的直覺說,只需要一種方法來做這個簡單的事情而不使用Python UDF。
如果你不介意輸入SQL,你實際上可以簡化爲'df.select(expr(「date_sub({0},{1})」)。format(「date_col」,「days_col」)))'這是微不足道的。 – zero323