我有一个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))
但是在这里我需要通过迭代列上的列来为每一列做这个,有没有办法我可以在整个行级别上进行,而不是迭代列。
答案 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)
其中filterEmpty
是udf
函数,如果任何列包含空值,则返回true
。
na.fill("")
将所有null
值替换为数据框中的空值。
和filter
函数会过滤掉不必要的行。
我希望答案很有帮助