Как суммировать столбец и добавить его в Spark DataFrame? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть Spark DataFrame следующим образом:

val someDF5 = Seq(
  ("202003101750", "202003101700",122),
  ("202003101800", "202003101700",12),
  ("202003101750", "202003101700",42),
  ("202003101810", "202003101700",2)
).toDF("number", "word","value")

Со столбцом num_records, выполнив следующие действия:

val DF1 = someDF5.groupBy("number","word").agg(count("*").alias("num_records"))

DF1:

+------------+------------+-------------+                                       
|      number|        word|num_records  |
+------------+------------+-------------+
|202003101750|202003101700|            2|
|202003101800|202003101700|            1|
|202003101810|202003101700|            1|
+------------+------------+-------------+

Как я могу добавить еще один столбец, скажем total_records, который отслеживает общее количество num_records и добавляет к кадру данных? Например, это то, что я ожидаю:

+------------+------------+-------------+-------------+--                                       
|      number|        word|num_records  |total_records  |
+------------+------------+-------------+----------------
|202003101750|202003101700|            2|             4 |
|202003101800|202003101700|            1|             4 |
|202003101810|202003101700|            1|             4 |
+------------+------------+-------------+----------------

Примечание: total_records должен обновляться / добавляться всякий раз, когда num_records изменяется

Ответы [ 2 ]

3 голосов
/ 28 апреля 2020

добавить withColumn и сосчитать все * Результат:

+------------+------------+-----------+-------------+
|      number|        word|num_records|total_records|
+------------+------------+-----------+-------------+
|202003101750|202003101700|          2|            5|
|202003101800|202003101700|          1|            5|
|202003101810|202003101700|          1|            5|
|202003101810|    22222222|          1|            5|
+------------+------------+-----------+-------------+

1 голос
/ 28 апреля 2020

Я думаю, что вы можете сделать это, создав новый фрейм данных с суммой:

val total = DF1.agg(sum(col("num_records"))).head().getAs[Long](0)
val dfWithTotal = DF1.withColumn("total_records", lit(total))
dfWithTotal.show()

+------------+------------+-----------+-------------+
|      number|        word|num_records|total_records|
+------------+------------+-----------+-------------+
|202003101810|202003101700|          1|            4|
|202003101750|202003101700|          2|            4|
|202003101800|202003101700|          1|            4|
+------------+------------+-----------+-------------+
...