Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 火花窗函数依赖于自身_Scala_Apache Spark Sql - Fatal编程技术网

Scala 火花窗函数依赖于自身

Scala 火花窗函数依赖于自身,scala,apache-spark-sql,Scala,Apache Spark Sql,假设我在数据帧中有一列排序的时间戳。我想编写一个函数,向这个数据帧添加一列,根据以下规则将时间戳切割成连续的时间片: 从第一行开始,一直迭代到最后 对于每一行,如果您在当前组中走了n行,或者在当前组中走了超过时间间隔t,则进行剪切 返回一个新列,每行的组分配应为递增整数 英文:每组不应超过n行,且时间跨度不应超过t 例如:(使用整数作为时间戳来简化) 输入 time --------- 1 2 3 5 1

假设我在数据帧中有一列排序的时间戳。我想编写一个函数,向这个数据帧添加一列,根据以下规则将时间戳切割成连续的时间片:

  • 从第一行开始,一直迭代到最后
  • 对于每一行,如果您在当前组中走了n行,或者在当前组中走了超过时间间隔t,则进行剪切
  • 返回一个新列,每行的组分配应为递增整数
英文:每组不应超过n行,且时间跨度不应超过t

例如:(使用整数作为时间戳来简化)

输入

     time
---------
        1
        2
        3
        5
       10
      100
     2000
     2001
     2002
     2003
输出(在n=3和t=5的切片函数之后)

我觉得这可以通过Spark中的窗口功能来实现。毕竟,创建窗口函数是为了帮助开发人员计算移动平均数。您基本上要计算每个n行窗口中一列(股票价格)的聚合(在本例中为平均值)

在这里也应该能够做到这一点。对于每一行,如果最后n行不包含剪切,或者最后一次剪切与当前时间戳之间的时间跨度大于t,
cut=true,o.w.cut=false
。但我似乎不知道如何让窗口函数意识到自己。这就像是某一行的移动平均线意识到了最后一个移动平均线

     time | group
----------|------
        1 |     1
        2 |     1
        3 |     1
        5 |     2 // cut because there were no cuts in the last 3 rows
       10 |     2
      100 |     3 // cut because 100 - 5 > 5
     2000 |     4 // cut because 2000 - 100 > 5
     2001 |     4
     2002 |     4
     2003 |     5 // cut because there were no cuts in the last 3 rows