检查数据框中的记录数是不是大于零而不使用计数火花

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

不妨这样做:

df.take(1).length == 0

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

【讨论】:

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

【讨论】:

以上是关于检查数据框中的记录数是不是大于零而不使用计数火花的主要内容,如果未能解决你的问题,请参考以下文章

Spark数据框中的不同记录数

Scala:检查当前时间戳是不是大于我的数据框中的时间戳列

计算火花数据框中的字数

在火花中比较两个数据框中的列

火花数据框中列表列的样本值

if语句检查文本框中的字符数