这是我的partitionBy条件,我需要根据数据框中的列值进行更改。
val windowSpec = Window.partitionBy("col1", "clo2","clo3").orderBy($"Col5".desc)
现在,如果数据框中的一列(col6)的值是I,那么上面的条件。
但是当列(col6)的值改变O然后低于条件
时val windowSpec = Window.partitionBy("col1","clo3").orderBy($"Col5".desc)
我如何在火花数据框中实现它。
因此对于每个记录来说,它将根据将应用的partitionBy条件检查col6是I还是O
答案 0 :(得分:1)
鉴于需要根据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
看看I
中是否至少有一个col6
并应用窗口规范。
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