scala - 希望根据单独 DF 的值减去一行中的每个值
问题描述
正如标题所述,我想用该列的平均值减去特定列的每个值。
这是我的代码尝试:
val test = moviePairs.agg(avg(col("rating1")).alias("avgX"), avg(col("rating2")).alias("avgY"))
val subMean = moviePairs.withColumn("meanDeltaX", col("rating1") - test.select("avgX").collect())
.withColumn("meanDeltaY", col("rating2") - test.select("avgY").collect())
subMean.show()
解决方案
您可以使用 Spark 的 DataFrame 函数或对 DataFrame 的单纯 SQL 查询来聚合您关注的列的均值 ( rating1
, rating2
)。
val moviePairs = spark.createDataFrame(
Seq(
("Moonlight", 7, 8),
("Lord Of The Drinks", 10, 1),
("The Disaster Artist", 3, 5),
("Airplane!", 7, 9),
("2001", 5, 1),
)
).toDF("movie", "rating1", "rating2")
// find the means for each column and isolate the first (and only) row to get their values
val means = moviePairs.agg(avg("rating1"), avg("rating2")).head()
// alternatively, by using a simple SQL query:
// moviePairs.createOrReplaceTempView("movies")
// val means = spark.sql("select AVG(rating1), AVG(rating2) from movies").head()
val subMean = moviePairs.withColumn("meanDeltaX", col("rating1") - means.getDouble(0))
.withColumn("meanDeltaY", col("rating2") - means.getDouble(1))
subMean.show()
测试输入 DataFrame 的输出moviePairs
(具有良好的双精度损失,您可以在此处看到):
+-------------------+-------+-------+-------------------+-------------------+
| movie|rating1|rating2| meanDeltaX| meanDeltaY|
+-------------------+-------+-------+-------------------+-------------------+
| Moonlight| 7| 8| 0.5999999999999996| 3.2|
| Lord Of The Drinks| 10| 1| 3.5999999999999996| -3.8|
|The Disaster Artist| 3| 5|-3.4000000000000004|0.20000000000000018|
| Airplane!| 7| 9| 0.5999999999999996| 4.2|
| 2001| 5| 1|-1.4000000000000004| -3.8|
+-------------------+-------+-------+-------------------+-------------------+
推荐阅读
- php - 邮递员原始数据有效,但表单数据不适用于 php 中的 POST 请求
- database - 检查用户是否保存在 Xamarin 的 SQLite 数据库中
- dart - 什么是 php 关联数组的 dart 等价物,以及如何将其存储在 Firestore 中?
- sql - 我的缺席函数 dosnt 正常工作 pgsql
- python - Python:将字典插入 Redis
- node.js - 将 Base64 上传到 Firebase 返回 413 状态码
- javascript - 如何在 azure cosmos 数据库中创建/更新大量记录
- python - 作者频道名称
- python-3.x - 不兼容的形状:[128,37] 与 [128,34]
- kubernetes - 如何为命名空间中的 pod 提供管理员访问权限?