gpt4 book ai didi

scala - spark 尽量避免收集

转载 作者:行者123 更新时间:2023-12-04 09:30:12 26 4
gpt4 key购买 nike

我看到了对使用 spark 的任何人的一般建议(在我的情况下使用 Scala)
是为了避免将所有数据从执行者获取到驱动程序的任何操作(收集、计数、求和等)。
但是,当我尝试使用 spark 统计库时
http://spark.apache.org/docs/2.2.0/ml-statistics.html
我发现相关矩阵和 ChiSquareTest 方法
期望从 array\seq 获得的数组或矩阵作为它们的参数,因此我不
看看我如何避免收集到数据框(以及我假设的更多操作
使其成为 Vectors 而不是 Row 类型)如果我想使用这个函数。将不胜感激任何帮助。

最佳答案

  • 在您的示例中,两个 Correlation.corrChiSquareTest.test正在接受数据帧,因此您无需在将数据传递给这些函数之前收集数据。您必须在驱动程序上收集这些函数的结果,但这不会导致任何问题,因为输出大小应该比初始数据集小得多,并且应该很容易适合驱动程序的内存。
  • 在关于 groupBy 的评论中回答您的问题/joins - 那些是“昂贵的”,但出于不同的原因。分组和连接会导致数据混洗——因此,您的工作人员需要通过网络发送大量数据,这比本地数据处理需要更多时间。尽管如此,如果您必须这样做 - 可以这样做,只需注意性能影响。
  • collect不建议在完整数据集上使用该方法,因为它可能会导致驱动程序出现 OOM 错误(想象一下,您有 50 Gb 数据集,分布在一个集群上,现在您正在单个节点上收集它),但是,如果您已经处理过数据,并且您知道会有一些合理的行数 - 这样做是非常安全的。 count从内存的角度来看根本不应该是一个问题,因为它只是返回数据集中的行数,而不是将它们全部发送到驱动程序节点。
  • 关于scala - spark 尽量避免收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62877734/

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