:RowNumberDedup、SHA2哈希與UUID5生成)
Koheesio去重與哈希實戰(zhàn)RowNumberDedup、SHA2哈希與UUID5生成【免費下載鏈接】koheesioPython framework for building efficient data pipelines. It promotes modularity and collaboration, enabling the creation of complex pipelines from simple, reusable components.項目地址: https://gitcode.com/gh_mirrors/ko/koheesioKoheesio 是一個用于構(gòu)建高效數(shù)據(jù)管道的 Python 框架它把復(fù)雜的 ETL 流程拆解成簡單、可復(fù)用的組件。在實際的數(shù)據(jù)管道開發(fā)中數(shù)據(jù)去重和哈希處理是最常見的兩類需求日志表里重復(fù)的訂單、需要脫敏的用戶 ID、以及要穩(wěn)定標(biāo)識每一行數(shù)據(jù)的業(yè)務(wù)主鍵。本文將圍繞 Koheesio 的三個核心轉(zhuǎn)換組件——RowNumberDedup去重、Sha2HashSHA2 哈希與HashUUID5UUID5 生成通過真實可運行的實戰(zhàn)案例幫你快速掌握數(shù)據(jù)管道中的去重與哈希技巧。為什么數(shù)據(jù)管道需要去重與哈希?在數(shù)據(jù)處理中我們經(jīng)常遇到三個痛點數(shù)據(jù)重復(fù)上游任務(wù)重跑、多源拼接導(dǎo)致同一業(yè)務(wù)鍵出現(xiàn)多行記錄直接下游統(tǒng)計出錯敏感信息保護(hù)手機號、郵箱等字段不能明文存儲需要哈希脫敏缺少穩(wěn)定主鍵多張表要關(guān)聯(lián)卻沒有統(tǒng)一的業(yè)務(wù)主鍵無法做增量或去重。Koheesio 恰好把這三類操作都封裝成了開箱即用的轉(zhuǎn)換組件你不需要手寫Window、row_number()或復(fù)雜的 UUID 位運算幾行代碼就能完成。實戰(zhàn)一RowNumberDedup 快速去重用法RowNumberDedup是 Koheesio 提供的行號去重組件核心思路是先按指定列分組再按排序列排序并編號最后只保留每組中編號為 1 的那一行。它的實現(xiàn)位于 row_number_dedup.py用法如下from koheesio.spark.transformations.row_number_dedup import RowNumberDedup df_dedup RowNumberDedup( dfdf, # 輸入 DataFrame columns[key], # 按哪些列分組去重 sort_columnsdt, # 組內(nèi)按哪列排序 target_columnrow_num, # 行號列名可自定義 ).transform()其中幾個關(guān)鍵參數(shù)需要注意參數(shù)作用默認(rèn)值columns分組去重依據(jù)列等價別名column無sort_columns組內(nèi)排序列字符串默認(rèn)按DESC排序空列表target_column存放行號的列名meta_row_number_columnpreserve_meta是否保留行號列False默認(rèn)情況下去重完成后行號列會被自動刪除如果你希望保留行號列做進(jìn)一步分析把preserve_metaTrue即可。此外sort_columns也支持傳入F.col(dt).desc()這樣的 Spark 列對象靈活控制升降序。完整的測試示例可以參考 test_row_number_dedup.py。實戰(zhàn)二Sha2Hash 生成安全哈希步驟Sha2Hash是 SHA-2 系列哈希組件支持 SHA-224、SHA-256、SHA-384、SHA-512 四種算法并且支持把多個列拼接后統(tǒng)一哈希非常適合生成數(shù)據(jù)脫敏標(biāo)識或業(yè)務(wù)指紋。實現(xiàn)位于 hash.pyfrom koheesio.spark.transformations.hash import Sha2Hash df_hash Sha2Hash( columns[id, string], # 參與哈希的列 target_columnhash, # 哈希結(jié)果輸出列 delimiter|, # 多列拼接的分隔符 num_bits256, # 算法位數(shù)224/256/384/512 ).transform(df)實踐中有三個小技巧值得記住多列拼接防碰撞單列哈希容易碰撞把id和string用|拼接后再哈希可以顯著降低沖突概率空值處理如果參與哈希的列存在 NULL結(jié)果為 NULL做關(guān)聯(lián)前要注意清洗列名校驗如果傳入的列不存在于 DataFrame組件會直接拋出ValueError幫你盡早發(fā)現(xiàn)問題。對應(yīng)的單元測試位于 test_hash.py包含多列、空值等邊界場景可以作為你驗證結(jié)果的參考。實戰(zhàn)三HashUUID5 生成穩(wěn)定 UUID 方法HashUUID5用于生成UUID5基于命名空間 名稱的確定性 UUID它的最大特點是同一輸入永遠(yuǎn)得到同一 UUID天然適合作為跨表關(guān)聯(lián)的穩(wěn)定主鍵。更難得的是它完全基于原生 Spark 函數(shù)實現(xiàn)不需要 UDF性能友好。實現(xiàn)位于 uuid5.pyfrom koheesio.spark.transformations.uuid5 import HashUUID5 df_uuid HashUUID5( source_columns[id, string], # 參與生成的列 target_columnuuid5, # 結(jié)果輸出列 namespacemy-namespace, # 自定義命名空間可選 extra_string, # 額外字符串用于避免碰撞 ).transform(df)使用HashUUID5時請注意命名空間不傳時默認(rèn)使用NAMESPACE_DNS傳入字符串會自動哈希為 UUID 命名空間碰撞規(guī)避如果業(yè)務(wù)上可能出現(xiàn)同值碰撞可通過extra_string附加一段字符串再哈希數(shù)據(jù)潔凈組件不做空格修剪建議先對源數(shù)據(jù)做清洗保證 UUID 的可復(fù)現(xiàn)性。測試用例在 test_uuid5.py里面給出了自定義命名空間、自定義分隔符等場景的預(yù)期結(jié)果。組合使用構(gòu)建一站式數(shù)據(jù)清洗管道 去重、哈希、UUID 生成三個組件可以無縫串聯(lián)形成一條完整的數(shù)據(jù)清洗流程先按業(yè)務(wù)鍵去重再對敏感字段做 SHA2 脫敏最后生成穩(wěn)定 UUID 作為主鍵。from koheesio.spark.transformations.row_number_dedup import RowNumberDedup from koheesio.spark.transformations.hash import Sha2Hash from koheesio.spark.transformations.uuid5 import HashUUID5 pipeline ( RowNumberDedup(columns[key], sort_columnsdt) .then(Sha2Hash(columns[phone], target_columnphone_hash)) .then(HashUUID5(source_columns[key], target_columnuuid5)) ) result pipeline.transform(df)這種組件即函數(shù)的鏈?zhǔn)綄懛ㄕ?Koheesio 模塊化理念的體現(xiàn)——每個轉(zhuǎn)換只做一件事組合起來卻能解決復(fù)雜問題。所有轉(zhuǎn)換組件都繼承自統(tǒng)一的Transformation基類輸入輸出都是 DataFrame你可以在 transformations.md 中查看完整的組件列表與設(shè)計說明。小結(jié)去重與哈希的進(jìn)階學(xué)習(xí)路徑 通過本文的實戰(zhàn)你應(yīng)該已經(jīng)掌握了 Koheesio 數(shù)據(jù)管道中三個最實用的組件RowNumberDedup用columnssort_columns完成精準(zhǔn)去重保留最新記錄Sha2Hash用num_bitsdelimiter生成多列哈希兼顧脫敏與防碰撞HashUUID5用namespaceextra_string生成確定性 UUID作為穩(wěn)定主鍵。如果想深入學(xué)習(xí)建議按下面順序進(jìn)階閱讀各組件源碼中的 docstring 與參數(shù)說明例如 row_number_dedup.py 和 hash.py運行對應(yīng)測試文件觀察不同參數(shù)下的輸出差異閱讀 transformations.md 了解Transformation、ColumnsTransformation等基類的擴展方式嘗試封裝屬于自己的去重與哈希組件。掌握這三板斧你的數(shù)據(jù)管道在數(shù)據(jù)質(zhì)量與數(shù)據(jù)安全上都會邁上一個新臺階【免費下載鏈接】koheesioPython framework for building efficient data pipelines. It promotes modularity and collaboration, enabling the creation of complex pipelines from simple, reusable components.項目地址: https://gitcode.com/gh_mirrors/ko/koheesio創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考