在 Spark 中删除空白行或半空半空行
Posted
技术标签:
【中文标题】在 Spark 中删除空白行或半空半空行【英文标题】:Removing blank rows or rows with half blank and half null in Spark 【发布时间】:2018-01-04 16:36:33 【问题描述】:我有一个 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))
但是在这里我需要通过在列上迭代列来为每一列执行此操作,有没有一种方法可以在整个行级别上执行此操作,而不是通过迭代列。
【问题讨论】:
查看THIS 问题以遍历数据框中的所有列。 How to Iterate each column in a Dataframe in Spark Scala的可能重复 @Jeremy 我可以遍历列...我正在寻找一种转换,它可以在行基础上删除而不是在单个列上进行迭代。 有没有更好的方式来表示..blank line....
?是null, null, null
吗?因此,您的问题有点不清楚。
【参考方案1】:
你可以使用以下逻辑
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
函数过滤掉不必要的行。
希望回答对你有帮助
【讨论】:
以上是关于在 Spark 中删除空白行或半空半空行的主要内容,如果未能解决你的问题,请参考以下文章
几乎或半空的列宽或比另一个表更好?如何快速编码或节省空间的 sql?