字符串去重_文件数据去重示例
【摘要】
本文介紹小文件與大文件在進行數據去重時的幾種處理辦法,比如按整行或關鍵列去除重復數據或留下重復數據,并用 esProc SPL 舉例實現。請點擊文件數據去重示例了解詳情
在數據處理業務中,有時需要清除文件中的重復數據或只留下重復數據,本文將從小文件、大文件兩方面介紹整行去重、關鍵列去重的幾種處理辦法,并提供用 esProc SPL 編寫的代碼示例。esProc 是專業的數據計算引擎,SPL 中有一套完善的集合運算領域的函數庫,很適合處理文件去重,寫出的代碼非常簡潔。
1. 小文件
1.1 整行去重
有一個文本文件,其每一行是一個字符串,要將文件中的重復行只保留一行。處理此問題可以把文件的每一行讀成一個字符串,組成一個集合,然后通過集合去重運算得出結果。
示例:報名繪畫興趣班的同學學號姓名記錄在 paint.txt 中,可能有些同學報了多次,請刪除文件中重復的報名后保存在 paint1.txt 中。原文件部分數據如下所示
20121102-Joan
20121107-Jack
20121113-Mike
20121107-Jack
esProc SPL 腳本如下:
1.2 關鍵列比較
一個文件,有多列數據,第一行是列名,第二行開始是數據記錄,要對文件中關鍵列的內容進行比較,對關鍵列內容重復的行進行刪除或只保留重復的行。
現有 2018 年的銷售訂單表 order_2018.xlsx,部分數據如下所示:
1.2.1. 去除重復
示例 1:請求出 2018 年購買產品的所有不同的客戶 Id,保存在文件 2018c.xlsx 中。
esProc SPL 腳本如下:
示例 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》中還有更多相關計算示例。
總結
以上是生活随笔為你收集整理的字符串去重_文件数据去重示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 内部类异常_Java笔记(三
- 下一篇: 不用数组 java输出杨辉三角_不用数组