PySpark数据帧过滤多列

时间:2017-08-23 11:39:30

标签: python filter pyspark apache-spark-sql

使用Spark 2.1.1

以下是我的数据框

id Name1   Name2

1 Naveen Srikanth 

2 Naveen Srikanth123

3 Naveen 

4 Srikanth Naveen

现在需要根据两个条件筛选行,因为名称有数字,所以需要过滤掉2和3的条件&n; 123和3具有空值

使用以下代码仅过滤行ID 2

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

陷入困境,包括第二个条件。

2 个答案:

答案 0 :(得分:4)

执行以下操作可以解决您的问题

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

答案 1 :(得分:0)

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

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()