在Spark中删除半空白和半空的空行或行

时间:2018-01-04 16:36:34

标签: scala apache-spark apache-spark-sql

我有一个Spark数据帧

id    name    address 
 1    xyz      nc
     null          
 ..blank line....
 3    pqr     stw

我需要从数据框中删除第2行和第3行,并需要输出

id    name    address 
 1    xyz      nc
 3    pqr     stw

我尝试过使用

df1.filter(($"id" =!= "") && ($"id".isNotNull)).filter(($"name" =!= "") && ($"name".isNotNull))

但是在这里我需要通过迭代列上的列来为每一列做这个,有没有办法我可以在整个行级别上进行,而不是迭代列。

1 个答案:

答案 0 :(得分:0)

您可以使用以下逻辑

import org.apache.spark.sql.functions._
def filterEmpty = udf((cols: mutable.WrappedArray[String]) => cols.map(_.equals("")).contains(true))

df.na.fill("").filter(filterEmpty(array("id", "name", "address")) =!= true).show(false)

其中filterEmptyudf函数,如果任何列包含空值,则返回true

na.fill("")将所有null值替换为数据框中的空值。

filter函数会过滤掉不必要的行。

我希望答案很有帮助