【问题标题】:Alternative to count in Spark sql to check if a query return empty result在 Spark sql 中计数以检查查询是否返回空结果的替代方法
【发布时间】:2020-09-05 23:11:37
【问题描述】:

我知道 count 在 Spark 中的操作可能会很昂贵,因此为了提高性能,我想有一种不同的方法来检查查询是否可以返回任何结果

这就是我所做的

var df = spark.sql("select * from table_name where condition = 'blah' limit 1");
var dfEmpty = df.head(1).isEmpty;

如果我使用上述解决方案检查查询结果,这是一个有效的解决方案还是有任何潜在的未捕获错误?不过速度要快很多。

【问题讨论】:

标签: apache-spark apache-spark-sql


【解决方案1】:

isEmpty 是数据的负责人.. 这对于检查是否为空是相当合理的,它是由 spark api 给出并经过优化的......因此,我更喜欢这个......

我认为在查询中也不需要限制 1。


  /**
   * Returns true if the `Dataset` is empty.
   *
   * @group basic
   * @since 2.4.0
   */
  def isEmpty: Boolean = withAction("isEmpty", limit(1).groupBy().count().queryExecution) { plan =>
    plan.executeCollect().head.getLong(0) == 0
  }

【讨论】:

【解决方案2】:

我认为这没问题,我猜你也可以省略limit(1),因为这也是df.isEmpty 实现的一部分。另见How to check if spark dataframe is empty?

请注意,df.isEmpty 的解决方案可能不会评估所有列。例如。如果您有 1 列的 UDF,这可能不会执行,并且可能会在实际查询中引发异常。另一方面,df.head(1).isEmpty 将评估 1 行的所有列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 2011-08-22
    • 1970-01-01
    • 2023-04-10
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多