Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 快速获取数据帧中的记录数_Scala_Apache Spark_Hadoop Streaming - Fatal编程技术网

Scala 快速获取数据帧中的记录数

Scala 快速获取数据帧中的记录数,scala,apache-spark,hadoop-streaming,Scala,Apache Spark,Hadoop Streaming,我有一个多达1000万条记录的数据帧。我怎样才能快速计数df.count要花很长时间。反正要花很多时间。至少第一次 一种方法是缓存数据帧,这样您就可以使用它进行更多操作,而不是计数 例如 后续操作不会花费太多时间。对数据帧中的记录进行计数所需的时间取决于集群的能力和数据的存储方式。性能优化可以使火花计数非常快 Spark对拼花地板文件执行计数比CSV/JSON文件更容易。拼花文件将计数存储在文件页脚中,因此Spark不需要读取文件中的所有行并实际执行计数,它只需获取页脚元数据即可。CSV/JSO

我有一个多达1000万条记录的数据帧。我怎样才能快速计数
df.count
要花很长时间。

反正要花很多时间。至少第一次

一种方法是缓存数据帧,这样您就可以使用它进行更多操作,而不是计数

例如


后续操作不会花费太多时间。

对数据帧中的记录进行计数所需的时间取决于集群的能力和数据的存储方式。性能优化可以使火花计数非常快

Spark对拼花地板文件执行计数比CSV/JSON文件更容易。拼花文件将计数存储在文件页脚中,因此Spark不需要读取文件中的所有行并实际执行计数,它只需获取页脚元数据即可。CSV/JSON文件没有任何此类元数据

如果数据存储在Postgres数据库中,则计数操作将由Postgres执行,计数执行时间将是数据库性能的函数

较大的集群通常会更快地执行计数操作(除非数据倾斜导致一个节点完成所有工作,而其他节点处于空闲状态)

snappy压缩算法通常比gzip更快,因为它可以通过火花进行分割,并且充气速度更快

approx_count_distinct
由发动机罩下提供动力,以牺牲精度为代价,可更有效地进行不同计数


另一个答案建议在计数之前进行缓存,这实际上会减慢计数操作。缓存是一项昂贵的操作,可能需要比计数更多的时间。缓存有时是一种重要的性能优化,但如果您只想简单地计算,就不能这样做。

什么是“很长的时间”?你能告诉我们更多关于你尝试计数的内容和方式吗?如果你不需要确切的答案,请参阅spark中的
countApprox
方法。我正在这样尝试。df.count()的可能重复是否可以给出一个场景,其中缓存大型df和相关成本是合理的?@Bonson-是的,缓存是一种强大的模式,可以大大加快某些类型的查询,特别是对于将被大量重用的数据帧。假设您有一个DF,执行一个大的过滤操作,然后对过滤后的DF进行一系列不同类型的计算。缓存过滤后的DF可能会有很大帮助。根据数据的不同,最好在缓存之前重新分区。简言之,是的,缓存有帮助,但也有伤害,因此需要智能地应用它。
df.cache()
df.count()