подсчет искр при условии - PullRequest
       0

подсчет искр при условии

0 голосов
/ 27 сентября 2019

Я пытаюсь сгруппировать фрейм данных, затем при агрегировании строк с количеством я хочу применить условие к строкам перед счетом.
Вот пример:

val test=Seq(("A","X"),("A","X"),("B","O"),("B","O"),("c","O"),("c","X"),("d","X"),("d","O")).toDF
test.show
+---+---+
| _1| _2|
+---+---+
|  A|  X|
|  A|  X|
|  B|  O|
|  B|  O|
|  c|  O|
|  c|  X|
|  d|  X|
|  d|  O|
+---+---+

в этом примере я хочу сгруппировать по столбцу _1 по счетчику по столбцу _2, когда значение = 'X'
вот ожидаемый результат:

+---+-----------+
| _1| count(_2) |
+---+-----------+
|  A|  2        |
|  B|  0        |
|  c|  1        |
|  d|  1        |
+---+-----------+

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Используйте when, чтобы получить эту агрегацию.Решение PySpark показано здесь.

from pyspark.sql.functions import when,count
test.groupBy(col("col_1")).agg(count(when(col("col_2") == 'X',1))).show()
0 голосов
/ 27 сентября 2019
import spark.implicits._

val test=Seq(("A","X"),("A","X"),("B","O"),("B","O"),("c","O"),("c","X"),("d","X"),("d","O")).toDF

test.groupBy("_1").agg(count(when($"_2"==="X", 1)).as("count")).orderBy("_1").show
+---+-----+
| _1|count|
+---+-----+
|  A|    2|
|  B|    0|
|  c|    1|
|  d|    1|
+---+-----+
0 голосов
/ 27 сентября 2019

В качестве альтернативы в Scala это может быть:

val counter1 = test.select( col("_1"), 
      when(col("_2") === lit("X"), lit(1)).otherwise(lit(0)).as("_2"))

val agg1 = counter1.groupBy("_1").agg(sum("_2")).orderBy("_1")

agg1.show

дает результат:

+---+-------+
| _1|sum(_2)|
+---+-------+
|  A|      2|
|  B|      0|
|  c|      1|
|  d|      1|
+---+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...