如何在一列pyspark中删除带空值的行

jac*_* rk 9 apache-spark pyspark spark-dataframe

我有一个数据帧,我想在其中一列(字符串)中删除所有具有NULL值的行.我可以很容易地得到这个数:

df.filter(df.col_X.isNull()).count()
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令删除它.它执行但计数仍然返回为正数

df.filter(df.col_X.isNull()).drop()
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的尝试,但它返回'对象不可调用'错误.

rog*_*one 18

数据帧是不可变的.因此,只应用一个删除非空值的过滤器将创建一个新的数据帧,该数据帧不具有空值的记录.

df = df.filter(df.col_X. isNotNull())
Run Code Online (Sandbox Code Playgroud)


小智 18

请使用dropsubset:

df.na.drop(subset=["col_X"])
Run Code Online (Sandbox Code Playgroud)

要么 is_NotNull

df.filter(df.col_X.isNotNull())
Run Code Online (Sandbox Code Playgroud)

  • 哪个更快? (4认同)

Mik*_*ikA 12

如果要删除任何值为空的行,请使用

df.na.drop()  //same as df.na.drop("any") default is "any"
Run Code Online (Sandbox Code Playgroud)

仅当该行的所有值均为空时才删除,请使用

df.na.drop("all")
Run Code Online (Sandbox Code Playgroud)

要通过传递列列表来删除,请使用

df.na.drop("all", Seq("col1", "col2", "col3"))
Run Code Online (Sandbox Code Playgroud)

  • 这是问题的实际答案。 (4认同)

Gra*_*non 5

另一个变化是:

from pyspark.sql.functions import col

df = df.where(col("columnName").isNotNull())
Run Code Online (Sandbox Code Playgroud)