Спарк, как выполнить умножение накопительно вдоль одного столбца - PullRequest
0 голосов
/ 20 октября 2018

Вот датафрейм в искре

+------+----+---+
| 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 ..., и я хочу получить окончательное значение.

1 Ответ

0 голосов
/ 20 октября 2018

Удаленный пост был почти у цели, но вы имеете дело с RDD типа строки, чтобы применить уменьшение, и у вас есть данные, подобные 120 и 134.4, которые затем имеют проблему с 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

Класс case болеедля формальности - как RDD получает проблему AnyVal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...