新手来了。我试图用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)本地运行是可以的,但我的计算能力就是不能削减它。这是一款内存为8G的2015款Macbook。
4) Spark很慢,因为我在运行Python。如果我使用的是Scala,那就更好了。(反对论点:我听说很多人都在使用PySpark。)
其中哪一个是最有可能的原因,或者是最可信的解释?我很想听听一些Spark专家的意见。非常感谢!
发布于 2016-01-06 19:17:23
在较小的数据集上,与pyspark相比,Python的性能肯定会更好。当您处理更大的数据集时,您将看到不同之处。
默认情况下,当您在SQL上下文或Hive上下文中运行spark时,它将默认使用200个分区。您需要使用sqlContext.sql("set spark.sql.shuffle.partitions=10");
将其更改为10或任何值。它肯定会比默认的更快。
1)我的数据集大约有220,000条记录,24MB,这不是一个足够大的数据集,无法显示Spark的缩放优势。
你是对的,在较低的音量下,你不会看到太大的差异。Spark也可以更慢。
2)我的spark在本地运行,我应该在类似亚马逊EC的环境中运行它。
对于你的体积来说,它可能没有多大帮助。
3)在本地运行是可以的,但我的计算能力就是不能解决这个问题。这是一款内存为8G的2015款Macbook。
同样,对于20MB数据集,这也无关紧要。
4) Spark很慢,因为我在运行Python。如果我使用的是Scala,那就更好了。(反对论点:我听说很多人都在使用PySpark。)
在独立的情况下,将会有所不同。与scala相比,Python有更多的运行时开销,但在具有分布式功能的大型集群上,这并不重要
https://stackoverflow.com/questions/34625410
复制相似问题