如何使用 Scala 在 dataFrame Spark 中执行除法操作



我有一个如下所示的数据帧。

+---+---+-----+
|uId| Id| sum |
+---+---+-----+
|  3|  1|  1.0|
|  7|  1|  1.0|
|  1|  2|  3.0|
|  1|  1|  1.0|
|  6|  5|  1.0|

使用上面的数据帧,我想在下面生成新的数据帧 Sum列应该是:-

例如:

For uid=3 and id=1, my sum column value should be  (old sum value  * 1 / count of ID(1)) I.e.
1.0*1/3=0.333
For uid=7 and id=1, my sum column value should be  (old sum value  * 1 / count of ID(1)) I.e.
1.0*1/3=0.333
For uid=1 and id=2, my sum column value should be  (old sum value  * 1 / count of ID(1)) I.e.
3.0*1/1=3.0
For uid=6 and id=5, my sum column value should be  (old sum value  * 1 / count of ID(1)) I.e.
1.0*1/1=1.0

我的最终输出应该是:

+---+---+---------+
|uId| Id|  sum    |
+---+---+---------+
|  3|  1|  0.33333|     
|  7|  1|  0.33333| 
|  1|  2|  3.0    |
|  1|  1|  0.3333 |
|  6|  5|  1.0    |
您可以使用

Window函数获取每组id列的count,最后使用该计数除以原始sum

import org.apache.spark.sql.expressions.Window
val windowSpec = Window.partitionBy("id")
import org.apache.spark.sql.functions._
df.withColumn("sum", $"sum"/count("id").over(windowSpec))

您应该将最终dataframe

+---+---+------------------+
|uId|Id |sum               |
+---+---+------------------+
|3  |1  |0.3333333333333333|
|7  |1  |0.3333333333333333|
|1  |1  |0.3333333333333333|
|6  |5  |1.0               |
|1  |2  |3.0               |
+---+---+------------------+

相关内容

  • 没有找到相关文章

最新更新