удалить все экземпляры дубликатов в pyspark - PullRequest
0 голосов
/ 22 января 2020

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

   Col1   Col2   Col3
   Alice  Girl   April
   Jean   Boy    Aug
   Jean   Boy    Sept

, я хочу удалить все дубликаты на основе Col1 и Col2, чтобы я получил

  Col1   Col2  Col3
  Alice  Girl  April

Есть ли Есть ли способ сделать это?

Кроме того, если у меня есть большое количество столбцов, например:

   Col1   Col2   Col3  .... Col n
   Alice  Girl   April .... Apple
   Jean   Boy    Aug   .... Orange
   Jean   Boy    Sept  .... Banana

Как бы я сгруппировал только по Col1 и Col2, но при этом оставил бы оставшиеся столбцы?

Спасибо

1 Ответ

1 голос
/ 22 января 2020
from pyspark.sql import functions as F
# Sample Dataframe
df = sqlContext.createDataFrame([
    ["Alice", "Girl","April"],
   ["Jean","Boy", "Aug"],
   ["Jean","Boy","Sept"]
], 
    ["Col1","Col2", "Col3"])

# Group by on required column and select rows where count is 1.
df2 = (df
       .groupBy(["col1", "col2"])
       .agg(
           F.count(F.lit(1)).alias('count'), 
           F.max("col3").alias("col3")).where("count = 1")).drop("count")

df2.show(10, False)

Вывод:

+-----+----+-----+
|col1 |col2|col3 |
+-----+----+-----+
|Alice|Girl|April|
+-----+----+-----+

Ответ на отредактированную версию

df = sqlContext.createDataFrame([
    ["Alice", "Girl","April", "April"],
    ["Jean","Boy", "Aug", "XYZ"],
    ["Jean","Boy","Sept", "IamBatman"]
], 
    ["col1","col2", "col3", "newcol"])

groupingcols = ["col1", "col2"]
othercolumns = [F.max(col).alias(col) for col in df.columns if col not in groupingcols]

df2 = (df
       .groupBy(groupingcols)
       .agg(F.count(F.lit(1)).alias('count'), *othercolumns)
       .where("count = 1")
       .drop("count"))

df2.show(10, False)

Вывод:

+-----+----+-----+------+
|col1 |col2|col3 |newcol|
+-----+----+-----+------+
|Alice|Girl|April|April |
+-----+----+-----+------+
...