Sql Window函数在spark中的整个数据帧上

时间:2017-12-14 09:38:15

标签: spark-streaming sql-function

我正在研究火花流项目,该项目每3分钟消耗一次卡夫卡的数据。我想计算移动的总和值。下面是适用于rdd的示例逻辑。我想知道这个逻辑是否适用于火花流。我读了一些你需要分配数据范围的文档。 ex - Window.partitionBy("name").orderBy("date").rowsBetween(-1, 1)但我想计算整个数据帧的逻辑。下面的逻辑是否适用于数据帧的整个值,或者它只需要数据帧的值范围。

val customers = spark.sparkContext.parallelize(List(("Alice", "2016-05-01", 50.00),
  ("Alice", "2016-05-03", 45.00),
  ("Alice", "2016-05-04", 55.00),
  ("Bob", "2016-05-01", 25.00),
  ("Bob", "2016-05-04", 29.00),
  ("Bob", "2016-05-06", 27.00))).
  toDF("name", "date", "amountSpent")

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
val wSpec1 = Window.partitionBy("name").orderBy("date")
customers.withColumn( "movingSum",
  sum(customers("amountSpent")).over(wSpec1)  ).show()

输出

    +-----+----------+-----------+---------+
    | name|      date|amountSpent|movingSum|
    +-----+----------+-----------+---------+
    |  Bob|2016-05-01|       25.0|     25.0|
    |  Bob|2016-05-04|       29.0|     54.0|
    |  Bob|2016-05-06|       27.0|     81.0|
    |Alice|2016-05-01|       50.0|     50.0|
    |Alice|2016-05-03|       45.0|     95.0|
    |Alice|2016-05-04|       55.0|    150.0|
    +-----+----------+-----------+---------+

0 个答案:

没有答案