gpt4 book ai didi

scala - 如何在 Spark 上执行大型计算

转载 作者:可可西里 更新时间:2023-11-01 15:45:59 25 4
gpt4 key购买 nike

我在 Hive 中有 2 个表:useritem 我正在尝试计算每个表的 2 个特征之间的余弦相似度,以获得 2 个表之间的笛卡尔积,即交叉连接。

大约有 20000 个 users 和 5000 个 items 导致 1 亿 行计算。我在具有 12 个内核的 Hive Cluster 上使用 Scala Spark 运行计算。

代码有点像这样:

val pairs = userDf.crossJoin(itemDf).repartition(100)
val results = pairs.mapPartitions(computeScore) // computeScore is a function to compute the similarity scores I need

Spark作业总是会因为Hadoop集群上的内存问题(GC Allocation Failure)而失败。如果我将计算量减少到 1000 万左右,它肯定会工作 - 不到 15 分钟。

如何在不增加硬件规范的情况下计算整个集合?如果作业需要更长的时间运行并且不会中途失败,我会很好。

最佳答案

如果您查看 Spark 文档,您会发现 spark 使用不同的数据管理策略。这些策略由用户通过 spark 配置文件中的配置或直接在代码或脚本中启用。

在有关数据管理政策的文档下方: data management policies

“MEMORY_AND_DISK”策略对您有好处,因为如果数据 (RDD) 不适合 ram,那么剩余的分区将存储在硬盘中。但如果您必须经常访问硬盘驱动器,这种策略可能会很慢。

关于scala - 如何在 Spark 上执行大型计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54803212/

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