【发布时间】:2016-07-03 06:07:13
【问题描述】:
给定以下 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'])
这在技术上是可行的,但我了解到,在 Spark 和 Python 之间切换可能会导致大型数据集出现性能问题。我现在可以坚持使用这个解决方案(无需过早优化),但我的直觉认为,必须有一种方法可以在不使用 Python UDF 的情况下完成这个简单的事情。
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql user-defined-functions