【问题标题】:Removing blank rows or rows with half blank and half null in Spark在 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 问题以遍历数据框中的所有列。
  • @Jeremy 我可以遍历列...我正在寻找一种转换,它可以在行基础上删除而不是在单个列上进行迭代。
  • 有没有更好的方式来表示..blank line....?是null, null, null吗?因此,您的问题有点不清楚。

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


【解决方案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)

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

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

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

希望回答对你有帮助

【讨论】:

    猜你喜欢
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 2011-05-30
    • 2022-01-03
    • 1970-01-01
    • 2012-08-14
    • 2020-04-19
    相关资源
    最近更新 更多