如何将无效的IP地址过滤到PySpark?

nhhxz33t  于 2022-09-21  发布在  Spark
关注(0)|答案(1)|浏览(163)

我有一张IP地址表。

enter image description here

通过Dropna()函数,我删除了空元素。

我还删除了重复和频繁的地址。

dt4new1 = dt4new.where("not (src = '0.0.0.0') and  not (dst = '0.0.0.0') ").where("not (src = '127.0.0.1') and  not (dst = '127.0.0.1') ").where("not (src = dst) ").where("not (src = '1')")

现在我有一张table,上面有非常随机的名字。我怎么才能摆脱它们呢?

enter image description here

jjhzyzn0

jjhzyzn01#

在删除所有空值和重复项之后,您可以标记有效的地址,即它们有四组由.分隔的数字。

以下是标记的示例。该标志可用于过滤。

data_sdf. 
    withColumn('ip_split', func.split('ip', '.')). 
    withColumn('valid_flag', 
               func.size(func.expr('filter(ip_split, x -> x between 0 and 999)')) == 4
               ). 
    show()

# +-----------+----------------+----------+

# |         ip|        ip_split|valid_flag|

# +-----------+----------------+----------+

# |       1.3"|         [1, 3"]|     false|

# |.194.32.167|[, 194, 32, 167]|     false|

# | 0.77.160.4| [0, 77, 160, 4]|      true|

# +-----------+----------------+----------+

它用.拆分字符串,然后只保留0-999之间的元素。计算保留的元素可以给出标志-如果有4个保留的元素,则IP地址有效。

相关问题