对于不同数量的工作节点,使用AWS EMR运行pyspark会有不同的结果

时间:2018-11-26 06:59:04

标签: amazon-web-services apache-spark pyspark amazon-emr amazon-sagemaker

我从GitHub页面(https://github.com/ThinkBigAnalytics/pyspark-distributed-kmodes)使用pyspark实现了K模式的分布式版本。实现后的算法完全遵循本文的方法。 (http://www.ijerd.com/paper/vol11-issue3/Version_1/J1137989.pdf

简而言之,我要做的是首先在每个分区中随机选择集群,然后在每个分区中进行Kmodes。之后,我在主节点中针对每个分区中的这些居中群集运行本地Kmodes以查找最终群集。

问题是我发现它在AWS EMR中可以在一个主节点和两个工作节点上正常工作(剪影得分大于0.7),但是如果我选择两个以上工作节点或更改工作节点类型(剪影,则情况会更糟)分数小于0.3)。

特别是:

1)如果有一个工作节点,则结果始终> 0.7;

2)如果有两个工作程序节点,则仅当硬件类型为m4.2xlarge时,结果才> 0.7;

3)如果有两个以上的工作节点,则无论硬件类型是什么,结果总是差很多;

由于此方法是基于分区的,因此我已经尝试在运行模型之前每次使用repartition()或coalesce()将分区固定为相同的编号。但是结果仍然相同。有人知道为什么会这样吗?

我在图表中附加了部分文档以供参考(尽管文档中的数据很小,我也尝试了50m行,并且结果相同)

谢谢。


环境:

AWS EMR:Hadoop 2.8.4;利维0.5.0;蜂巢2.3.3; Spark 2.3.2;

AWS Sagemaker:带Python34的SparkMagic
结果分析文档

Result Analysis Documentation

0 个答案:

没有答案