Spark Dataframe的count()API

时间:2017-08-30 06:27:25

标签: java apache-spark dataframe count spark-dataframe

我使用Spark with Java连接器来处理我的数据。

我需要对数据执行的一项基本操作是计算数据框中的记录数(行数)。

我尝试df.count()但执行时间非常慢(2-3M记录为30-40秒)。

此外,由于系统的要求,我不想使用df.rdd().countApprox() API,因为我们需要确切的计数。

有人可以给我一个关于任何返回与df.count()完全相同的替代方案的建议,并且执行时间更快吗?

非常感谢您的回复。

4 个答案:

答案 0 :(得分:3)

df.cache
df.count

它第一次会很慢,因为它在第一次执行计数期间进行缓存,但在后续计数中将为您提供良好的性能。

利用df.cache取决于用例。

答案 1 :(得分:1)

检查数据框是否有行的简单方法是执行Try(df.head)。如果成功,那么数据框中至少有一行。如果失败,则数据帧为空。 Here's a scala implementation of this.

Here is the reason why df.count() is a slow operation.

答案 2 :(得分:1)

伯爵很快。您需要查看其他一些操作,数据加载和转换,以生成您正在计算的数据框。这就是让你减速而不是计数本身的部分。

如果您可以减少加载的数据量或删除任何不影响计数的转换,您可以加快速度。如果这不是一个选项,你可能会。更有效地编写转换。不知道你的转变虽然不可能说出瓶颈可能是什么。

答案 3 :(得分:0)

我刚刚发现将数据加载到Spark数据框中以进行进一步的查询和计数是不必要的。

相反,我们可以使用aerospike客户端来完成这项工作,它比上述方法快得多。

以下是如何使用aerospike客户端的参考 http://www.aerospike.com/launchpad/query_multiple_filters.html

谢谢大家