【发布时间】:2018-02-07 18:04:36
【问题描述】:
我正在使用带有 Java 连接器的 Spark 来处理我的数据。
我需要对数据执行的一项基本操作是计算数据框中的记录(行)数。
我尝试了df.count(),但执行时间非常慢(2-3M 记录需要 30-40 秒)。
另外,由于系统的要求,我不想使用df.rdd().countApprox() API,因为我们需要准确的计数。
有人可以给我一个建议,提供与df.count() 返回完全相同的结果且执行时间更快的任何替代方案吗?
非常感谢您的回复。
【问题讨论】:
-
我认为没有更好的选择。但是,如果您对数据框执行多个操作,您可以考虑使用
cache(),请参阅stackoverflow.com/questions/45749580/… -
我相信在您对其执行操作(而不是转换)之前实际上并未加载数据。因此,运行时间可能部分是由于从磁盘或数据库读取数据。
-
您是否尝试使用
registerTempTable,然后使用select count(*)或df.selectExpr("count(*)").show?我猜它本质上是一样的,但你永远不知道。 :D -
是的,查询本身显示得非常快,因为在调用
count()之前实际上没有进行任何数据检索。count()本身应该比较快,你可以通过缓存数据并调用 count 两次来尝试,第一次(有数据检索)可能会很慢,而第二次(只执行实际的count()操作)应该明显更快。 -
是的,它更快,但不幸的是,这不是我们的情况。不过还是谢谢。
标签: java apache-spark dataframe count spark-dataframe