【问题标题】:Check if number of records in dataframe is greater than zero without using count spark检查数据框中的记录数是否大于零而不使用计数火花
【发布时间】:2017-05-17 13:52:25
【问题描述】:

我想检查我创建的数据框是否不为空并且至少有 1 条记录。除了使用 count 方法并检查计数值是否大于 0 之外,还有没有更好的方法。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    不妨这样做:

    df.take(1).length == 0
    

    rdd.isEmpty 在内部实现了上述功能。

    【讨论】:

    • 它可以更快。当我们调用.rdd 时,Spark 无法优化某些数据源的查询,例如 JDBC。您的版本使用了所有可能的优化
    • @T.Gawęda RDD 不是 Spark 中所有内容的底层来源吗?我只是想知道如果数据框有一百万行,df.rdd 会花费很多时间吗?
    • Datasets 使用它,但是当您在 Dataset 上调用操作时,Spark 会尝试优化查询。此外,调用rdd 将行从内部形式反序列化为正常形式 - 请参阅stackoverflow.com/questions/43843470/…
    【解决方案2】:

    使用rdd.isEmpty:

    scala> Seq[(Long, String)]((1L, "a")).toDF.rdd.isEmpty
    res0: Boolean = false
    
    scala> Seq[(Long, String)]().toDF.rdd.isEmpty
    

    res1: Boolean = true

    【讨论】:

    • 这会比计数快吗?
    【解决方案3】:

    使用RDD的isEmpty

    def isEmpty(): Boolean = withScope {
    partitions.length == 0 || take(1).length == 0
    

    }

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      相关资源
      最近更新 更多