【问题标题】:Difference between na().drop() and filter(col.isNotNull) (Apache Spark)na().drop() 和 filter(col.isNotNull) 之间的区别 (Apache Spark)
【发布时间】:2016-05-30 09:11:55
【问题描述】:

df.na().drop()df.filter(df.col("onlyColumnInOneColumnDataFrame").isNotNull() && !df.col("onlyColumnInOneColumnDataFrame").isNaN()) 之间的语义有什么区别,dfApache Spark Dataframe

或者,如果第一个在 onlyColumnInOneColumnDataFrame 列中没有返回 null(不是字符串 null,而只是一个 null 值),而第二个没有返回,我是否应该将其视为错误?

编辑:也添加了!isNaN()onlyColumnInOneColumnDataFrame 是给定 Dataframe 中的唯一列。假设它的类型是Integer

【问题讨论】:

  • 您能提供一个示例数据吗?
  • 我注意到那些nulls 使用以下代码-gist.github.com/xjrk58/87dd094e2987ecc448db,但会尝试简化它并为输入数据提供可重现的案例。更准确地说,在第 4 行调用 df.show() 后,“definitionId”列包含 null 值。

标签: apache-spark apache-spark-sql


【解决方案1】:

使用df.na.drop(),您可以删除包含 any null 或 NaN 值的行。

使用df.filter(df.col("onlyColumnInOneColumnDataFrame").isNotNull()),您可以删除那些仅在onlyColumnInOneColumnDataFrame 列中为空的行。

如果你想实现同样的目标,那就是df.na.drop(["onlyColumnInOneColumnDataFrame"])

【讨论】:

  • 重点是onlyColumnInOnColumnDataFrame 是给定DataFrame 中的唯一列,我也尝试过isNotNaN()(或者可能是!isNan()),但我仍然是过滤后在此列中获取空值,问题是这是一个错误还是我遗漏了什么。
  • 如 zero323 所问,请提供一些示例数据。
  • 丹尼尔,应该调用 df.na.drop() 和 df.na.drop(subset=["onlyColumnInOneColumnDataFrame"])
  • 这是独家的吗?即,如果 onlyColumnInOneColumnDataFrame" 和另一个 col 也都为 null,则不会被过滤。如果是这种情况,那么也许您应该写:" With df.filter(df.col("onlyColumnInOneColumnDataFrame").isNotNull()) you drop那些在列 onlyColumnInOneColumnDataFrame 中为 null 的行只是好奇的排他性对我来说似乎很奇怪。
  • 使用此代码(使用 pyspark 2.4.4),我得到了错误:TypeError: can only concatenate str (not "list") to str。我需要指定subset 参数名称:df.na.drop(subset=["column_name"])
【解决方案2】:

在一种情况下,我必须选择具有 NA 或空值或 >=0 的记录。我可以通过仅使用合并函数而不使用上述 3 个函数来实现。

rdd.filter("coalesce(index_column, 1000) >= 0") 

【讨论】:

    猜你喜欢
    • 2017-01-31
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2019-06-15
    • 2018-08-30
    • 2011-03-14
    相关资源
    最近更新 更多