希望这是相当基本的。我有一个包含Date列的Spark数据帧,我想添加一个新列,该列包含自该日期以来的天数。谷歌是我的失败。
以下是我尝试的内容:
from pyspark.sql.types import *
import datetime
today = datetime.date.today()
schema = StructType([StructField("foo", DateType(), True)])
l = [(datetime.date(2016,12,1),)]
df = sqlContext.createDataFrame(l, schema)
df = df.withColumn('daysBetween',today - df.foo)
df.show()
失败并出现错误:
你"无法解决'(17212 - foo)'由于数据类型不匹配:'(17212 - 富)'需要(数字或日历间隔)类型,而不是日期;"
我试过摆弄但却无处可去。我不能认为这太难了。有人可以帮忙吗?
答案 0 :(得分:5)
好的,想通了
from pyspark.sql.types import *
import pyspark.sql.functions as funcs
import datetime
today = datetime.date(2017,2,15)
schema = StructType([StructField("foo", DateType(), True)])
l = [(datetime.date(2017,2,14),)]
df = sqlContext.createDataFrame(l, schema)
df = df.withColumn('daysBetween',funcs.datediff(funcs.lit(today), df.foo))
df.collect()
返回[Row(foo=datetime.date(2017, 2, 14), daysBetween=1)]
答案 1 :(得分:3)
您可以执行以下操作:
import pyspark.sql.functions as F
df = df.withColumn('daysSince', F.datediff(F.current_date(), df.foo))