这是我的分区条件,我需要根据数据框中的列值进行更改。
val windowSpec = Window.partitionBy("col1", "clo2","clo3").orderBy($"Col5".desc)
现在,如果数据框中的一列 (col6( 的值为 I,则高于条件。
但是当列(col6(的值改变O时,则低于条件
val windowSpec = Window.partitionBy("col1","clo3").orderBy($"Col5".desc)
如何在火花数据框中实现它。
所以就像对于每条记录,它将根据该分区条件检查 col6 是 I 还是 O
鉴于需要根据col6
列的值选择最终窗口规范,我将首先filter
然后执行最终窗口聚合。
scala> dataset.show
+----+----+----+----+----+
|col1|col2|col3|col5|col6|
+----+----+----+----+----+
| 0| 0| 0| 0| I| // <-- triggers 3 columns to use
| 0| 0| 0| 0| O| // <-- the aggregation should use just 2 columns
+----+----+----+----+----+
使用上面的数据集,我会filter
看看col6
中是否至少有一个I
并应用窗口规范。
val windowSpecForIs = Window.partitionBy("col1", "clo2","clo3").orderBy($"Col5".desc)
val windowSpecForOs = Window.partitionBy("col1","clo3").orderBy($"Col5".desc)
val noIs = dataset.filter($"col6" === "I").take(1).isEmpty
val windowSpec = if (noIs) windowSpecForOs else windowSpecForIs