如何对每列值使用不同的窗口规范



这是我的分区条件,我需要根据数据框中的列值进行更改。

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

相关内容

  • 没有找到相关文章

最新更新