【问题标题】:How to calculate the number of rows of a dataframe efficiently? [duplicate]如何有效地计算数据帧的行数? [复制]
【发布时间】:2019-04-09 13:35:09
【问题描述】:

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

【问题讨论】:

标签: apache-spark pyspark apache-spark-sql


【解决方案1】:

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

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

在这种情况下,您可以将 count() 结果缩放 2(或 1/0.5)。显然,这种方法存在统计误差。

【讨论】:

  • 我正在尝试,但运行时间仍然相当长,虽然我使用的是 0.1 的因子。
  • 数据分区好不好?如果没有,您可能没有利用所有执行者。就此而言,您的分区与执行者的比率是多少?
  • 我没明白你的意思。但是,我使用 Google Colab 运行代码,我只是将 df.count() 操作替换为 df.sample(0.1).count() 并重新运行代码。还有什么要设置的吗?
  • 要获取数据帧的分区数,请致电df.rdd.getNumPartitions()。如果该值为 1,则您的数据尚未并行化,因此您无法从 spark 集群中的多个节点或内核中受益。如果您确实获得了大于 1 的值(理想情况下,接近 200),那么接下来要看的是知道你的 spark 集群有多少可用的执行程序。您可以通过查看集群的 Spark 状态网页来执行此操作。
  • 我正在尝试使用 df.coalesce() 方法设置分区数,但 Colab 不会生成超过四个分区。执行者只有一个,我不知道如何在 Google Colab 上增加它们。但是,Colab 使用的是六核处理器。
猜你喜欢
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 2015-09-12
  • 2019-12-10
  • 2016-10-06
  • 1970-01-01
相关资源
最近更新 更多