我正在学习Spark,我正在尝试创建一个列,显示日期和截止值之间的天数差。
这里有一些数据沿着我用Pandas的解决方案。
lst = ['2018-11-21',
'2018-11-01',
'2018-10-09',
'2018-11-23',
'2018-11-08',
'2018-10-06',
'2018-11-27',
'2018-10-07',
'2018-10-23',
'2018-11-02']
d = pd.DataFrame({'event':np.arange(len(lst)),'ts':lst})
d['ts'] = d['ts'].apply(pd.to_datetime) # only needed because I have alist of strings
d['new_ts'] = d.ts - (d.ts.max() - pd.to_timedelta(15, unit='d'))
不幸的是,我找不到一种方法来使这种逻辑适应pyspark。我认为问题在于减去了不是DataFrame一部分的静态日期。
假设df是上述数据集“d”的“Spark版本”,下面是我尝试的一件事:
calculator = udf(lambda x: datediff(datediff(date_sub(max(x),30),x)))
c = df.withColumn('Recency',calculator(col('ts')))
然而,他在下面给予了我一个很长的错误c.select(col('Recency')).show(1)c.show(1)
提前感谢每一个愿意帮忙的人。
1条答案
按热度按时间y53ybaqx1#
其逻辑是: