多列上的PySpark数据帧筛选器

2024-05-03 16:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Spark 2.1.1

下面是我的数据框

id Name1   Name2

1 Naveen Srikanth 

2 Naveen Srikanth123

3 Naveen 

4 Srikanth Naveen

现在需要根据两个条件过滤行,即2和3需要被过滤掉,因为name有数字123,3有空值

使用下面的代码仅筛选行id 2

df.select("*").filter(df["Name2"].rlike("[0-9]")).show()

被困在第二种情况下。


Tags: 数据代码nameiddf数字条件select
2条回答

应该是简单的将多个条件放入过滤器。

val df = List(
  ("Naveen", "Srikanth"), 
  ("Naveen", "Srikanth123"), 
  ("Naveen", null), 
  ("Srikanth", "Naveen")).toDF("Name1", "Name2")

import spark.sqlContext.implicits._  
df.filter(!$"Name2".isNull && !$"Name2".rlike("[0-9]")).show

或者如果您不喜欢使用spark sql $

df.filter(!df("Name2").isNull && !df("Name2").rlike("[0-9]")).show 

或者在Python中:

df.filter(df["Name2"].isNotNull() & ~df["Name2"].rlike("[0-9]")).show()

做以下事情应该能解决你的问题

from pyspark.sql.functions import col
df.filter((!col("Name2").rlike("[0-9]")) | (col("Name2").isNotNull))

相关问题 更多 >