получение дубликатов, но сохранение повторяющихся строк в pyspark - PullRequest
0 голосов
/ 30 января 2020

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

+--+--+--+--+
|a |b |c |d |
+--+--+--+--+
|1 |0 |1 |2 |
|0 |2 |0 |1 |
|1 |0 |1 |2 |
|0 |4 |3 |1 |
|1 |0 |1 |2 |
+--+--+--+--+ 

Я бы хотел получить что-то вроде:

+--+--+--+--+--+--+--+--+
|a |b |c |d |row_count  |
+--+--+--+--+--+--+--+--+
|1 |0 |1 |2 |3          |
|0 |2 |0 |1 |0          |
|1 |0 |1 |2 |3          |
|0 |4 |3 |1 |0          |
|1 |0 |1 |2 |3          |
+--+--+--+--+--+--+--+--+

Возможно ли это? Спасибо

1 Ответ

1 голос
/ 30 января 2020

Предполагая, что df является вашим входным фреймом данных:

from pyspark.sql.window import Window
from pyspark.sql import functions as F
from pyspark.sql.functions import *


w = (Window.partitionBy([F.col("a"), F.col("b"), F.col("c"), F.col("D")]))
df=df.select(F.col("a"), F.col("b"), F.col("c"), F.col("D"), F.count(F.col("a")).over(w).alias("row_count"))

Если, согласно вашему примеру, вы хотите заменить каждый счет 1 на 0 do:

from pyspark.sql.window import Window
from pyspark.sql import functions as F
from pyspark.sql.functions import *


w = (Window.partitionBy([F.col("a"), F.col("b"), F.col("c"), F.col("D")]))
df=df.select(F.col("a"), F.col("b"), F.col("c"), F.col("D"), F.count(F.col("a")).over(w).alias("row_count")).select("a", "b", "c", "d", F.when(F.col("row_count")==F.lit(1), F.lit(0)). otherwise(F.col("row_count")).alias("row_count"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...