gpt4 book ai didi

scala - 哪种方法最好检查数据帧是否为空? `df.limit(1).count == 0`或 `df.isEmpty`?

转载 作者:行者123 更新时间:2023-12-04 03:41:53 25 4
gpt4 key购买 nike

对于以下两种检查数据帧是否为空的方法:

  • df.isEmpty
  • df.limit(1).count == 0

  • 我看到 df.isEmpty具有以下实现:
      def isEmpty: Boolean = withAction("isEmpty", limit(1).groupBy().count().queryExecution) { plan =>
    plan.executeCollect().head.getLong(0) == 0
    }

    看起来它不只是直接计数。
    groupBy背后的想法是什么?只是为了获取数据框?

    为什么使用 queryExecution计划?

    最佳答案

    在这篇文章中,我看到了三个不同的问题。
    表演节目
    如果仔细检查源代码,您会发现 df.count 所做的groupBy与获取RelationalGroupedDateset的相同。
    因此,如果我们比较两个实现:

    def isEmpty: Boolean = withAction("isEmpty", limit(1).groupBy().count().queryExecution) { 
    plan => plan.executeCollect().head.getLong(0) == 0
    }

    def count(): Long = withAction("count", groupBy().count().queryExecution) { plan =>
    plan.executeCollect().head.getLong(0)
    }
    df.isEmptydf.limit(1).count() == 0在幕后的行为完全相同。
    但是,为了清楚起见,我会选择 df.isEmpty
    为什么使用 queryExecution计划?
    查询执行计划是具有全局执行计划所需的属性。
    每次完成转换后,此转换都会升级 queryExecution
    每次执行操作时,都会检索 queryExecution,然后Catalyst计划对其进行优化。 groupBy背后的想法是什么?
    count 方法创建一个带有单个组的 RelationalGroupedDataset 。然后用 Literal(1)填充该组,然后同时按键减少(它不包含键,因此减少了每一列),以得到一个带有称为“count”的单列且只有一行包含count的 DataFrame。 (这就是为什么在 df.count实现中我们可以看到 .head.getLong(0)的原因
    此实现使您可以在每个分区中同时减少数据量,而无需创建要计数的迭代器。

    关于scala - 哪种方法最好检查数据帧是否为空? `df.limit(1).count == 0`或 `df.isEmpty`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57146851/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com