我有一个订单的DataFrame(contactidid,orderdate或ordeount),我想要一个新列,其中包含每个订单,此订单前12个月的联系人所有订单金额的总和。我认为最好的方法是在Spark> 1.5中使用Windowing函数和新的INTERVAL能力。
但是我很难完成这项工作或找到文档。我最好的猜测是:
val dfOrdersPlus = dfOrders
.withColumn("ORDERAMOUNT12MONTH",
expr("sum(ORDERAMOUNT) OVER (PARTITION BY CONTACTID ORDER BY ORDERDATE RANGE BETWEEN INTERVAL 12 months preceding and INTERVAL 1 day preceding)"));
但是我得到了一个RuntimeException:'输入结束预期'。任何关于我做错了什么的想法' expr'在哪里可以找到关于新的INTERVAL文字的文档?
答案 0 :(得分:1)
至于现在:
expr
不支持窗口功能。要使用窗口函数,您必须在注册表上使用DataFrame
DSL或原始SQL(仅限Spark 1.5和1.6)
窗口函数仅支持数值类型的范围间隔。您无法使用DateType
/ TimestampType
和日期INTERVAL
表达式。 (Spark 1.5,1.6,2.0.0-preview)
如果要使用带日期或时间列的窗口函数,可以先将这些函数转换为Unix时间戳。您可以在Spark Window Functions - rangeBetween dates中找到完整的示例。