首页 > 解决方案 > spark如何沿一列累积执行乘法

问题描述

这是火花中的一个数据框

+------+----+---+
| Close|sell|buy|
+------+----+---+
| 314.6|   0|  1|
|   120|   1|  0|
|   192|   0|  1|
|199.46|   1|  0|
|255.05|   0|  1|
|250.52|   1|  0|
|252.53|   0|  1|
|245.32|   1|  0|
-----------------

我想要做的是:对于第一列的所有行,将它们累加,即314.6 * 120 * 192 * 199.65 ...我想得到最终值。

标签: apache-sparkapache-spark-sql

解决方案


已删除的帖子几乎就在那里,但是您正在处理 Row Type 的 RDD 以便应用减少,并且拥有像 120 和 134.4 这样的数据,然后这些数据与带有 Row Type 的 AnyVal 存在问题。

我建议以下考虑到 123 和 123.5 格式:

case class Employee(first_name:String, job_type:String, salary:Double)

val dfE = spark.createDataFrame(
                                Seq(Employee("John", "sh_clerk", 20000), 
                                    Employee("Peter", "sh_clerk", 60000.0), Employee("Sally", "manager", 50000.0),
                                    Employee("Cabe", "programmer", 100000.0), Employee("Bob", "accountant", 65000.0)     
                               )
                           )


dfE.show(false)
dfE.printSchema()
dfE.select("salary").rdd.map(row => row.getDouble(0)).reduce(_*_) 

在这种情况下,它毫无例外地返回以下内容:

res19: Double = 3.9E23

案例类更多是为了形式 - 因为 RDD 遇到了 AnyVal 问题。


推荐阅读