gpt4 book ai didi

performance - 在spark中使用scala将预测结果保存到HDFS表中在yarn-cluster模式下非常慢

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

我使用scala在spark中构建了一个机器学习项目,并使用spark-submit以“--masteryarn-cluster”作为参数启动它。计算步骤很快,但总是在写表步骤卡几个小时。输出仅为 3Mb。有人遇到过这个问题吗?

scala写表代码如下

mlPredictResult
.select("orderid","prediction")
.write
.mode(SaveMode.Overwrite)
.saveAsTable("tmp_sbu_vadmtestdb.AntiCF_ClickFarming_predicted")

spark-submit代码如下

spark-submit  --class Ml_Learning --master yarn-cluster --executor-memory 5G --num-executors 50 AntiCF-1.0-SNAPSHOT.jar

最佳答案

在 Spark 中,有两种类型的命令:转换(它们是“惰性的”,即它们仅在需要时才执行)和操作(立即执行)。

我假设:- 计算步骤似乎非常快,因为它们很懒。- write/saveAsTable 似乎非常慢,因为它是一个触发 Spark 执行延迟转换的操作,而延迟转换直到此时才计算。

==>写入磁盘需要花费大量时间,是因为在写入磁盘之前需要进行计算。

http://spark.apache.org/docs/latest/programming-guide.html

*RDD 支持两种类型的操作:转换(从现有数据集创建新数据集)和操作(在对数据集运行计算后将值返回给驱动程序)。例如,map 是一种转换,它将每个数据集元素传递给函数并返回表示结果的新 RDD。另一方面,reduce 是一个使用某个函数聚合 RDD 的所有元素并将最终结果返回给驱动程序的操作(尽管也有一个并行的reduceByKey 返回分布式数据集)。Spark 中的所有转换都是惰性的,因为它们不会立即计算结果。相反,他们只记住应用于某些基础数据集(例如文件)的转换。 仅当操作需要将结果返回到驱动程序时才计算转换。这样的设计使得Spark能够更高效地运行。例如,我们可以意识到,通过map创建的数据集将在reduce中使用,并且只将reduce的结果返回给驱动程序,而不是更大的映射数据集。*

注意:修改机器学习 Spark 代码和/或 Spark 资源可能会减少计算时间

关于performance - 在spark中使用scala将预测结果保存到HDFS表中在yarn-cluster模式下非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40879660/

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