Spark 决策树拟合在 1 个任务中运行
Spark Decision tree fit runs in 1 task
我正在尝试 "train" DecisionTreeClassifier
在 Amazon EMR 的集群中使用 Apache Spark 运行。尽管我可以看到添加了大约 50 个执行程序,并且这些功能是通过使用 SparkSQL 查询 Postgres 数据库创建的,并存储在 DataFrame 中。
DesisionTree fit
方法需要很多小时,即使数据集不是那么大(10.000 db 条目,每行有几百个字节)。
我可以看到这只是一项任务,所以我认为这就是它这么慢的原因。
我应该在哪里寻找在一个任务中这是 运行 的原因?
这是我检索数据的方式吗?
很抱歉,如果这有点含糊,但我不知道检索数据的代码是否相关,或者它是算法中的一个参数(虽然我没有在网上找到任何东西),还是只是 Spark 调优?
我将不胜感激!
提前致谢。
Spark 依赖于数据局部性。似乎所有数据都位于一个地方。因此 spark 使用单个分区来处理它。您可以应用重新分区或说明您希望在加载时使用的分区数。我还会查看决策树 Api 并查看是否可以专门为其设置分区数。
基本上,分区是您的并行级别。
我正在尝试 "train" DecisionTreeClassifier
在 Amazon EMR 的集群中使用 Apache Spark 运行。尽管我可以看到添加了大约 50 个执行程序,并且这些功能是通过使用 SparkSQL 查询 Postgres 数据库创建的,并存储在 DataFrame 中。
DesisionTree fit
方法需要很多小时,即使数据集不是那么大(10.000 db 条目,每行有几百个字节)。
我可以看到这只是一项任务,所以我认为这就是它这么慢的原因。
我应该在哪里寻找在一个任务中这是 运行 的原因?
这是我检索数据的方式吗?
很抱歉,如果这有点含糊,但我不知道检索数据的代码是否相关,或者它是算法中的一个参数(虽然我没有在网上找到任何东西),还是只是 Spark 调优?
我将不胜感激!
提前致谢。
Spark 依赖于数据局部性。似乎所有数据都位于一个地方。因此 spark 使用单个分区来处理它。您可以应用重新分区或说明您希望在加载时使用的分区数。我还会查看决策树 Api 并查看是否可以专门为其设置分区数。 基本上,分区是您的并行级别。