文件數據去重示例

【摘要】
本文介紹小文件與大文件在進行數據去重時的幾種處理辦法,好比按整行或關鍵列去除重複數據或留下重複數據,並用 esProc SPL 舉例實現。請點擊文件數據去重示例瞭解詳情函數

在數據處理業務中,有時須要清除文件中的重複數據或只留下重複數據,本文將從小文件、大文件兩方面介紹整行去重、關鍵列去重的幾種處理辦法,並提供用 esProc SPL 編寫的代碼示例。esProc 是專業的數據計算引擎,SPL 中有一套完善的集合運算領域的函數庫,很適合處理文件去重,寫出的代碼很是簡潔。spa

1. 小文件

1.1 整行去重

有一個文本文件,其每一行是一個字符串,要將文件中的重複行只保留一行。處理此問題能夠把文件的每一行讀成一個字符串,組成一個集合,而後經過集合去重運算得出結果。blog

示例:報名繪畫興趣班的同窗學號姓名記錄在 paint.txt 中,可能有些同窗報了屢次,請刪除文件中重複的報名後保存在 paint1.txt 中。原文件部分數據以下所示
    20121102-Joan
    20121107-Jack
    20121113-Mike
    20121107-Jackip

esProc SPL 腳本以下:內存

1.2 關鍵列比較

一個文件,有多列數據,第一行是列名,第二行開始是數據記錄,要對文件中關鍵列的內容進行比較,對關鍵列內容重複的行進行刪除或只保留重複的行。字符串

現有 2018 年的銷售訂單表 order_2018.xlsx,部分數據以下所示:產品

1.2.1. 去除重複

示例 1:請求出 2018 年購買產品的全部不一樣的客戶 Id,保存在文件 2018c.xlsx 中。it

esProc SPL 腳本以下:class

示例 2:請求出 2018 年各位客戶購買了哪些不一樣產品,將 CustomerId 和 ProductId 保存在文件 2018c_p.xlsx 中。請求

esProc SPL 腳本以下:

1.2.2. 只保留重複

示例:請求出 2018 年回頭客 (即屢次購買同種產品的客戶) 的訂單狀況,將結果保存在文件 2018c_rebuy.xlsx 中。

esProc SPL 腳本以下:

2. 大文件

大文件數據不能一次性所有裝進內存,不能象小文件數據那樣所有讀出來再進行重複性比較,須要分批讀出數據去比較。esProc SPL 提供了遊標來處理大文件運算,使大文件去重運算也變得十分方便。

2.1 整行去重

有大文本文件,其每一行是一個字符串,要將文件中的重複行只保留一行。處理此問題要把文件的每一行讀成一個字符串,成爲遊標中的一條記錄,而後經過遊標的去重運算得出結果。

示例:現有全國房產產權人員登記表大文件 all.txt,裏面記錄產權人的身份證及姓名,部分數據以下所示:
    510121198802213364-Joan
    110113199203259852-Jack
    201264197206271113-Mike

因爲有些人員在多個州擁有房產,因此文件中會有重複的登記,請將重複的登記只保留一個,將結果保存在 all2.txt 中。esProc SPL 腳本以下:

2.2 關鍵列比對

本節仍用銷售訂單表爲例,是全部年份的合併銷售訂單表 orders.xlsx,是個大文件。

2.2.1. 去除重複

示例 1:請找出購買產品的全部不一樣的客戶 Id,保存在文件 customers.xlsx 中。

esProc SPL 腳本以下:

示例 2:請找出各位客戶購買了哪些不一樣產品,將 CustomerId 和 ProductId 保存在文件 c_p.xlsx 中。

esProc SPL 腳本以下:

2.2.2. 只保留重複

示例:請找出回頭客 (即屢次購買同種產品的客戶) 的訂單狀況,將結果保存在文件 c_rebuy.xlsx 中。

esProc SPL 腳本以下:

《SPL CookBook》中還有更多相關計算示例。

相關文章
相關標籤/搜索