gpt4 book ai didi

scala - Spark 样本太慢

转载 作者:行者123 更新时间:2023-12-04 01:35:40 25 4
gpt4 key购买 nike

我正在尝试使用 Scala 从现有表中执行一个简单的随机样本,其中包含大约 100e6 条记录。

import org.apache.spark.sql.SaveMode

val nSamples = 3e5.toInt
val frac = 1e-5
val table = spark.table("db_name.table_name").sample(false, frac).limit(nSamples)
(table
.write
.mode(SaveMode.Overwrite)
.saveAsTable("db_name.new_name")
)

但这花费的时间太长(据我估计约为 5 小时)。

有用的信息:

  1. 我有大约 6 名 worker 。通过分析表的分区数得到:11433

  2. 我不确定分区/工作器比例是否合理。

  3. 我正在使用 Scala 运行 Spark 2.1.0。

我试过:

  1. 删除 .limit() 部分。

  2. frac 更改为 1.00.1

问题:我怎样才能让它更快?

最好的,

最佳答案

限制绝对值得删除,但真正的问题是采样需要完整的数据扫描。无论分数有多低,时间复杂度仍然是 O(N)*。

如果您不需要良好的统计属性,您可以尝试通过先对数据文件进行采样,然后从减少的数据集中进行子采样来限制首先加载的数据量。如果数据均匀分布,这可能工作得相当好。

否则,除了扩展集群之外,您无能为力。


* How do simple random sampling and dataframe SAMPLE function work in Apache Spark (Scala)?

关于scala - Spark 样本太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50004006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com