在这里激发新手。我试图使用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)我的spark在本地运行,我应该在类似Amazon EC的环境中运行它。

3)可以在本地运行,但是我的计算能力却不足。这是8 Gig RAM 2015 Macbook。

4)Spark运行缓慢,因为我正在运行Python。如果我使用Scala,那就更好了。 (反对派观点:我听说很多人都在使用PySpark很好。)

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

最佳答案

在较小的数据集上,与pyspark相比,Python的性能肯定会更好。在处理较大的数据集时,您会看到不同之处。

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



没错,在较低的音量下您不会看到太大的差异。 Spark也会变慢。



对于您的音量,可能没有太大帮助。



同样,对于20MB数据集也没有关系。



独立运行会有差异。 Python比scala具有更多的运行时开销,但是在具有分布式功能的大型集群上,这没关系

关于python - 为什么我的Spark运行速度比纯Python慢​​?性能比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34625410/

10-12 00:06
查看更多