使用PySpark删除任何具有至少1个NA的行



我有一个pyspark数据帧,我想删除任何至少包含一个NA的行。
我只知道如何对一列执行此操作(下面的代码(。

如何对数据帧的所有列执行相同操作?

可复制示例

# Import modules
from pyspark.sql import SparkSession
from pyspark import SparkContext
from pyspark.sql.functions import col
from pyspark.sql import Row
# Defining SparkContext
SparkContext.getOrCreate() 
# Defining SparkSession
spark = SparkSession 
.builder 
.master("local") 
.appName("Introduction au DataFrame") 
.getOrCreate()
# Initiating DataFrame
values = [("1","2","3"), 
("NA","1", "2"), 
("4", "NA", "1")] 
columns = ['var1', 
'var2', 
'var3']
df = spark.createDataFrame(values, columns)
# Initial dataframe
df.show()
+----+----+----+
|var1|var2|var3|
+----+----+----+
|   1|   2|   3|
|  NA|   1|   2|
|   4|  NA|   1|
+----+----+----+
# Subset rows without NAs (column 'var1')
df.where(~col('var1').contains('NA')).show()
+----+----+----+
|var1|var2|var3|
+----+----+----+
|   1|   2|   3|
|   4|  NA|   1|
+----+----+----+

我的预期输出

+----+----+----+
|var1|var2|var3|
+----+----+----+
|   1|   2|   3|
+----+----+----+

我也试过什么

我试过以下方法,但PySpark似乎不像熊猫那样识别NA
它只识别null值。

df.na.drop().show()
df.select([count(when(isnan('var1'), True))]).show()
df.filter(df['var1'].isNotNull()).show()
new = (df.na.replace({'NA': None})#Replace string NA with null
.dropna()#Drop NA
).show()

试试这个:

df.dropna().show()

您也可以在dropna方法中指定参数:
如果是how = 'any',则是您的情况
how = 'all'如果所有列都为null,则该行将被删除
默认情况下"any"是什么

最新更新