Apache spark 如何有效地计算数据帧的行数?

Apache spark 如何有效地计算数据帧的行数?,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我有一个非常大的pyspark数据帧,我会计算行数,但是count()方法太慢了。还有其他更快的方法吗?如果您不介意获得近似计数,可以先尝试,然后按采样因子缩放: >>> df = spark.range(10) >>> df.sample(0.5).count() 4 在本例中,您可以将count()结果缩放2(或1/0.5)。显然,这种方法有一个统计错误。可能重复,可能简短的答案是否定的,但如果缓存,它将加快后续调用的计数速度。甚至没有近似的方法吗?请尝

我有一个非常大的pyspark数据帧,我会计算行数,但是
count()
方法太慢了。还有其他更快的方法吗?

如果您不介意获得近似计数,可以先尝试,然后按采样因子缩放:

>>> df = spark.range(10)
>>> df.sample(0.5).count()
4

在本例中,您可以将
count()
结果缩放2(或1/0.5)。显然,这种方法有一个统计错误。

可能重复,可能简短的答案是否定的,但如果缓存,它将加快后续调用的计数速度。甚至没有近似的方法吗?请尝试
df.rdd.countApprox()
也许我正在尝试,但运行时间仍然相当长,虽然我使用了0.1的系数,但数据分区是否良好?否则,您可能无法充分利用所有执行者。关于这个问题,你的分区与执行者的比率是多少?我不明白你的意思。但是,我使用GoogleColab来运行代码,我只是用df.sample(0.1.count()替换了df.count()操作,然后重新运行代码。还有其他设置吗?要获取数据帧的分区计数,请调用
df.rdd.getNumPartitions()
。如果该值为1,则表示您的数据尚未并行化,因此您无法从spark群集中的多个节点或核心中获益。如果您获得的值大于1(理想情况下,接近200),则下一步要查看的是了解spark群集的可用执行者数量。您可以通过查看集群的Spark status网页来实现这一点。我试图使用df.coalesce()方法设置分区数,但Colab生成的分区不超过四个。只有一个执行者,我不知道如何在Google Colab上增加他们。但是,Colab使用十六进制核心处理器。