scala - spark数据框:查找薪水高于组织平均薪水的员工
问题描述
我正在尝试运行测试 spark/scala 代码,以使用以下 spark dataframe 的测试数据查找薪水超过平均薪水的员工。但这在执行时失败了:
线程“主”java.lang.UnsupportedOperationException 中的异常:无法评估表达式:avg(input[4, double, false])
实现此目的的正确语法可能是什么?
val dataDF20 = spark.createDataFrame(Seq(
(11, "emp1", 2, 45, 1000.0),
(12, "emp2", 1, 34, 2000.0),
(13, "emp3", 1, 33, 3245.0),
(14, "emp4", 1, 54, 4356.0),
(15, "emp5", 2, 76, 56789.0)
)).toDF("empid", "name", "deptid", "age", "sal")
val condition1 : Column = col("sal") > avg(col("sal"))
val d0 = dataDF20.filter(condition1)
println("------ d0.show()----", d0.show())
解决方案
您可以通过两个步骤完成此操作:
val avgVal = dataDF20.select(avg($"sal")).take(1)(0)(0)
dataDF20.filter($"sal" > avgVal).show()
+-----+----+------+---+-------+
|empid|name|deptid|age| sal|
+-----+----+------+---+-------+
| 15|emp5| 2| 76|56789.0|
+-----+----+------+---+-------+
推荐阅读
- terraform - 阻止 terraform 0.11 模块的使用与 terraform 0.12 兼容
- java - @Value 返回空值
- c# - 错误 CS0103:当前上下文中不存在名称“AssetPreview”
- javascript - 有没有办法在网页中使用“chrome”命名空间?
- python - TKinter CheckButtons 不会正确更新值
- java - 将不可序列化的 activiti TaskService 自动装配到 Spring Web Flow 中使用的组件中
- node.js - 尝试将我的代码从 circleci 部署到 firebase 时出错
- python - H2O 性能指标:AUCPR 不可用?
- excel - 如何循环工作表,将部分列复制并粘贴到另一个工作表
- c# - 比较 Concurrent Dictionary 与 Dictionary+Locks 的性能