替代在 Spark sql 中计数以检查查询是否返回空结果

Dre*_*mer 2 apache-spark apache-spark-sql

我知道countSpark 中的 action 可能很昂贵,所以为了提高性能,我想有一种不同的方式来检查查询是否可以返回任何结果

这是我所做的

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

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

Ram*_*ram 5

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
  }
Run Code Online (Sandbox Code Playgroud)