在 Spark DataFrame 中添加一个新列,其中包含一列的所有值的总和 - Scala/Spark

维卡什帕特瓦

这是添加一列后拍摄的快照,但不包含一列所有值的总和

我正在尝试在数据框中添加一列,其中包含同一数据框中一列的所有值的总和。

例如:在图片中有列 - UserID、MovieID、Rating、Unixtimestamp。现在我想添加一个名为 Sum 的列,它将包含 Rating Column 的所有值的总和。

我有一个评级数据框

Ratings DataFrame 列名称:UserID、MovieID、Ratings、UnixTimeStamp。

+------+-------+------+-------------+
|UserID|MovieID|Rating|UnixTimeStamp|
+------+-------+------+-------------+
|   196|    242|     3|    881250949|
|   186|    302|     3|    891717742|
|    22|    377|     1|    878887116|
|   244|     51|     2|    880606923|
|   166|    346|     1|    886397596|
+------+-------+------+-------------+

只显示前 5 行

我必须计算 wa 等级并将其存储到数据框中。

wa_rating=(评分>3)/总评分

请帮我找到 wa_rating 数据框,其中包含一个使用 scala spark 的新列

堆栈0114106

看一下这个:

scala> val df = Seq((196,242,3,881250949),(186,302,3,891717742),(22,377,1,878887116),(244,51,2,880606923),(166,346,1,886397596)).toDF("userid","movieid","rating","unixtimestamp")
df: org.apache.spark.sql.DataFrame = [userid: int, movieid: int ... 2 more fields]

scala> df.show(false)
+------+-------+------+-------------+
|userid|movieid|rating|unixtimestamp|
+------+-------+------+-------------+
|196   |242    |3     |881250949    |
|186   |302    |3     |891717742    |
|22    |377    |1     |878887116    |
|244   |51     |2     |880606923    |
|166   |346    |1     |886397596    |
+------+-------+------+-------------+


scala> import org.apache.spark.sql.expressions._
import org.apache.spark.sql.expressions._

scala> val df2 = df.withColumn("total_rating",sum('rating).over())
df2: org.apache.spark.sql.DataFrame = [userid: int, movieid: int ... 3 more fields]

scala> df2.show(false)
19/01/23 08:38:46 WARN window.WindowExec: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.
+------+-------+------+-------------+------------+
|userid|movieid|rating|unixtimestamp|total_rating|
+------+-------+------+-------------+------------+
|22    |377    |1     |878887116    |10          |
|244   |51     |2     |880606923    |10          |
|166   |346    |1     |886397596    |10          |
|196   |242    |3     |881250949    |10          |
|186   |302    |3     |891717742    |10          |
+------+-------+------+-------------+------------+


scala> df2.withColumn("wa_rating",coalesce( when('rating >= 3,'rating),lit(0))/'total_rating).show(false)
19/01/23 08:47:49 WARN window.WindowExec: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.
+------+-------+------+-------------+------------+---------+
|userid|movieid|rating|unixtimestamp|total_rating|wa_rating|
+------+-------+------+-------------+------------+---------+
|22    |377    |1     |878887116    |10          |0.0      |
|244   |51     |2     |880606923    |10          |0.0      |
|166   |346    |1     |886397596    |10          |0.0      |
|196   |242    |3     |881250949    |10          |0.3      |
|186   |302    |3     |891717742    |10          |0.3      |
+------+-------+------+-------------+------------+---------+


scala>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

向Spark DataFrame添加一个空列

在Spark DataFrame中添加一列并为其计算值

根据第一个数据框Java中的列创建具有新列值的新Spark DataFrame

如果列在另一个 Spark Dataframe 中,Pyspark 创建新列

Spark Dataframe列,另一列的最后一个字符

基于 Spark Dataframe 中的 Condition 创建一个新列

根据另一列的字符串搜索在Spark Dataframe中创建具有功能的新列

在所有DataFrame列中搜索值(第一列除外),并添加具有匹配列名的新列

从 DataFrame 中删除一列中仅包含一个唯一值的组

如何在 Spark Dataframe 上的字符串中添加一列字符的索引?

修改spark DataFrame列

Spark Dataframe Arraytype列

在Spark Dataframe中将一列转换为多列

如何创建一个新的DataFrame,其中每一列代表一个实例在上一个DataFrame的一行中的出现

Spark Dataframe更改列值

在Spark DataFrame中基于旧列添加新列

Spark SQL Map仅DataFrame的一列

Spark DataFrame中的collectAsList

CaseWhen在Spark DataFrame中

Spark DataFrame中的SumProduct

在DataFrame中添加具有相邻列数的新列作为另一列的值

在 spark DataFrame 中創建兩列,一列用於累積值,另一列用於最大連續值

如何根据另一列的值从 Spark DataFrame 中选择特定列?

我想基于上一列添加一个新的DataFrame列,以便如果上一列元素与列表值匹配,请更改该值

Spark DataFrame 在列中包含特定的整數值

获取Spark Dataframe列中列表的最后一个元素

在Spark中获取DataFrame列的值

使用Scala从Spark中一列值的范围汇总到一个新列

Spark DataFrame不添加具有空值的列