检查数据框中的记录数是不是大于零而不使用计数火花
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
【讨论】:
以上是关于检查数据框中的记录数是不是大于零而不使用计数火花的主要内容,如果未能解决你的问题,请参考以下文章