SparkSQL在窗口规范中未正确排序

时间:2018-08-01 19:50:26

标签: apache-spark apache-spark-sql sql-order-by window-functions

我正在以分布式模式运行spark,并且在窗口化方面遇到了一些麻烦。让我们看看我的数据框中的一种特定情况:

df.where($"client_id" === 221689).orderBy($"sequence_num".asc).show

+---------+------------+-----+
|client_id|sequence_num|state|
+---------+------------+-----+
|   221689|     6417377|REPBI|
|   221689|     6417378|DESBL|
|   221689|     6417379|REPOS|
|   221689|      920002|SUSUN|
|   221689|      920003|BLOQU|
|   221689|      920004|SUSBI|
|   221689|      920005| BAJA|
+---------+------------+-----+

很显然,订购工作不正常。当我应用窗口时,会应用相同的错误顺序:

val client_window = Window.partitionBy($"client_id").orderBy($"sequence_num").rowsBetween(Long.MinValue, Long.MaxValue)
df.withColumn("last_state", last($"state") over client_window).where($"client_id" === 221689).show

+---------+------------+-----+----------+
|client_id|sequence_num|state|last_state|
+---------+------------+-----+----------+
|   221689|     6417377|REPBI|      BAJA|
|   221689|     6417378|DESBL|      BAJA|
|   221689|     6417379|REPOS|      BAJA|
|   221689|      920002|SUSUN|      BAJA|
|   221689|      920003|BLOQU|      BAJA|
|   221689|      920004|SUSBI|      BAJA|
|   221689|      920005| BAJA|      BAJA|
+---------+------------+-----+----------+

last_state的值应为REPOS,如最新序列号的状态一样,但是正在计算BAJA,这是不正确的。

我正在HDP 2.6.1集群中使用Spark 1.6.3。

0 个答案:

没有答案