如何使用Scala在dataFrame Spark中执行除法运算?

时间:2017-11-13 12:30:25

标签: scala apache-spark apache-spark-sql

我有一个类似下面的dataFrame。

using System.Linq;

namespace WpfApp1
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();

            DataGrid1.ItemsSource = Enumerable.Range(1, 10).ToList();
        }
    }
}

使用上面的DataFrame,我想在下面生成新的DataFrame <ListBox.ItemTemplate>列应为: -

例如:

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

我的最终输出应该是:

Sum

1 个答案:

答案 0 :(得分:2)

您可以使用Window函数获取每组count列的id,最后使用该计数来划分原始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               |
+---+---+------------------+