我有一个订单的DataFrame(contactidid,orderdate,orderamount),并且我想要一个新列,其中包含每个订单的该订单之前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文字的文档的任何想法?
就目前而言:
中不支持窗口功能expr
。要使用窗口功能,您必须DataFrame
在已注册的表上使用DSL或原始SQL(仅适用于Spark 1.5和1.6)
窗口函数仅在数字类型上支持范围间隔。您不能使用DateType
/TimestampType
和日期INTERVAL
表达式。(Spark 1.5、1.6、2.0.0预览)
如果要使用带有日期或时间列的窗口函数,可以先将它们转换为Unix时间戳。您将在Spark Window Functions中找到完整的示例-rangeBetween日期。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句