为什么我的Spark运行速度比纯Python慢​​?性能比较

时间:2016-01-06 04:00:34

标签: python performance apache-spark pyspark apache-spark-sql

在这里点火新手。我尝试使用Spark对我的数据框执行一些pandas操作,并且令人惊讶的是它比纯Python慢​​(即在Python中使用pandas包)。这就是我的所作所为:

1) 在Spark:

train_df.filter(train_df.gender == '-unknown-').count()

返回结果大约需要30秒。但使用Python需要大约1秒钟。

2)在Spark:

sqlContext.sql("SELECT gender, count(*) FROM train GROUP BY gender").show()

同样的事情,在Spark中花费大约30秒,在Python中花费1秒。

我的Spark比纯Python慢​​得多的几个原因:

1)我的数据集大约有220,000条记录,24 MB,并且这些数据集不足以显示Spark的扩展优势。

2)我的火花在本地运行,我应该在Amazon EC这样的地方运行它。

3)在本地运行是可以的,但我的计算能力并没有削减它。它是一款8 Gig RAM 2015 Macbook。

4)Spark很慢,因为我正在运行Python。如果我使用Scala会更好。 (Con论点:我听说很多人都在使用PySpark。)

其中哪一个最有可能是原因,还是最可信的解释?我很想听到一些Spark专家的意见。非常感谢!!

1 个答案:

答案 0 :(得分:6)

与小型数据集上的pyspark相比,Python肯定会表现得更好。在处理更大的数据集时,您将看到差异。

默认情况下,在SQL Context或Hive Context中运行spark时,默认情况下将使用200个分区。您需要使用sqlContext.sql("set spark.sql.shuffle.partitions=10");将其更改为10或更高价值。它肯定比默认更快。

  

1)我的数据集大约有220,000条记录,24 MB,并且不是很大   足够的数据集来展示Spark的扩展优势。

你是对的,在较低的音量下你不会看到太大的差异。 Spark也可以更慢。

  

2)我的火花在本地运行,我应该运行它   相反,亚马逊EC。

对于你的音量来说,它可能没多大帮助。

  

3)在本地运行是可以的,但我的计算能力并没有减少   它。它是一款8 Gig RAM 2015 Macbook。

同样,对于20MB数据集也无关紧要。

  4)Spark很慢,因为我正在运行Python。如果我使用Scala它   会好得多。 (Con论点:我听到很多人都在使用   PySpark就好了。)

单独站立就会有所不同。 Python比scala具有更多的运行时开销,但在具有分布式功能的较大集群上,它无关紧要