在 PySpark 数据框中删除包含特定值的行

jk1*_*093 5 apache-spark apache-spark-sql pyspark pyspark-sql

我有一个 pyspark 数据框,如:

A B C
1 不适用 9
4 2 5
6 4 2
5 1 不适用

我想删除包含值“NA”的行。在这种情况下,第一行和最后一行。如何使用 Python 和 Spark 实现这一点?


根据评论更新:寻找一种解决方案,该解决方案可以删除在许多列中的任何列中包含字符串:NA 的行。

cro*_*oik 9

只需使用数据框过滤器表达式:

l = [('1','NA','9')
    ,('4','2', '5')
    ,('6','4','2')
    ,('5','NA','1')]
df = spark.createDataFrame(l,['A','B','C'])
#The following command requires that the checked columns are strings!
df = df.filter((df.A != 'NA') & (df.B != 'NA') & (df.C != 'NA'))
df.show()

+---+---+---+ 
|  A|  B|  C| 
+---+---+---+ 
|  4|  2|  5| 
|  6|  4|  2| 
+---+---+---+
Run Code Online (Sandbox Code Playgroud)

@bluephantom:如果您有数百列,只需通过列表理解生成一个字符串表达式:

#In my example are columns need to be checked
listOfRelevantStringColumns = df.columns
expr = ' and '.join('(%s != "NA")' % col_name for col_name in listOfRelevantStringColumns)
df.filter(expr).show()
Run Code Online (Sandbox Code Playgroud)

  • 如果有数百列怎么办? (2认同)