簡體   English   中英

PySpark 正則表達式從數據框列中過濾無效的 IPv4 和 IPv6 地址

[英]PySpark regex to filter invalid IPv4 and IPv6 addresses from dataframe column

我在代碼中有以下行:

.filter((~f.col("DestinationIP").rlike("^([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$")) | 
                            ~f.col("DestinationIP").rlike("^([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"))

但我收到此錯誤消息:

raise ValueError('%r 似乎不是 IPv4 或 IPv6 地址'%
ValueError:“016301004081”似乎不是 IPv4 或 IPv6 地址

如何解決這個問題? 我只希望有效的 IPv4 和 IPv6 地址保留在我的列中並過濾掉所有其他行。

您可能應該刪除在 Spark 中等同於NOT~符號。

您當前的過濾器保留不符合任一條件的行。 如果您有 IPv4,它可能與 IPv6 條件不匹配,因此該值保持不變。 016301004081 - 它不匹配任何條件,所以它仍然存在。

代替:

Keep:
    (NOT IPv4)
    OR
    (NOT IPv6)

改變后你會有

Keep:
    IPv4
    OR
    IPv6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM