使用Spark Dataframes,在窗口函数中使用interval的示例

时间:2016-06-20 15:41:57

标签: apache-spark

我有一个订单的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文字的文档?

1 个答案:

答案 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中找到完整的示例。