取消
顯示的結果
而不是尋找
你的意思是:

怎麼出現的所有重複的記錄在一個PySpark DataFrame基於特定列?

麥當娜
重視貢獻二世

你好,

我需要找出現重複記錄的所有PySpark DataFrame。下麵是示例數據集:

#數據準備數據= [(“A”,“一個”,1),\ (“A”,“一個”,2),\ (“A”,“一個”,3),\“A”、“B”(4), \“A”、“B”(5), \ (“A”、“C”、6), \ (“A”,“D”, 7), \ (“A”,“E”, 8), \] #創建DataFrame列= [“col_1”、“col_2”,“col_3”] df =火花。createDataFrame(=數據、模式=列)df.printSchema () df.show(截斷= False)

圖像

當我試著下麵的代碼:

primary_key = [' col_1 ', ' col_2 '] duplicate_records = df.exceptAll (df.dropDuplicates (primary_key))

的輸出將會是:

圖像

正如你所看到的,我不明白出現的所有重複的記錄基於主鍵,因為重複的記錄的一個實例是在“df.dropDuplicates (primary_key)”。第一和第四記錄必須在輸出的數據集。

知道解決這個問題嗎?

1接受解決方案

接受的解決方案

daniel_sahal
尊敬的貢獻者三世

你好,

不重複的記錄,做“left_anti”加入應該足夠了。

not_duplicate_records = df.groupBy (primary_key) .count ()。在哪裏(數= 1).drop duplicate_records = df(“計數”)。加入(= primary_key not_duplicate_records, =“left_anti”),告訴()

圖像

在原帖子查看解決方案

3回複3

daniel_sahal
尊敬的貢獻者三世

你好,

不重複的記錄,做“left_anti”加入應該足夠了。

not_duplicate_records = df.groupBy (primary_key) .count ()。在哪裏(數= 1).drop duplicate_records = df(“計數”)。加入(= primary_key not_duplicate_records, =“left_anti”),告訴()

圖像

Shalabh007
尊敬的貢獻者

@Mohammad軍刀如何使用下麵的窗口函數

windowSpec = Window.partitionBy (* primary_key) df.withColumn (“primary_key_count F.count (“*”) .over (windowSpec)) .filter (F.col (primary_key_count) > 1) .drop (“primary_key_count”),告訴(截斷= False)

NhatHoang
重視貢獻二世

你好,

根據我的經驗,如果你使用dropDuplicates(),火花將隨機行。

因此,你應該定義一個邏輯刪除重複的行。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map