火花速度表现

时间:2014-10-18 19:11:10

标签: python apache-spark

我有针对单台计算机(在Python中)执行的程序,并且还为Spark实现了相同的程序。这个程序基本上只读取.json,从中获取一个字段并将其保存回来。使用Spark我的程序在1个主服务器和1个服务器上运行速度大约慢100倍,然后是单节点标准Python程序(当然我从文件中读取并保存到文件中)。所以我想问一下问题可能出在哪里?

My Spark程序如下:

sc = SparkContext(appName="Json data preprocessor")
distData = sc.textFile(sys.argv[2])
json_extractor = JsonExtractor(sys.argv[1])
cleanedData = distData.flatMap(json_extractor.extract_json) 
cleanedData.saveAsTextFile(sys.argv[3])

JsonExtractor只选择sys.argv [1]给出的字段中的数据。

我的数据基本上是很多小的一行文件,其中这一行总是json。

我已经尝试过,在所有机器上从/向Amazon S3和本地光盘读取和写入数据。

我想问一下,我是否可能会遗漏某些内容,或者与本地非并行单节点程序相比,Spark是否应该如此慢。

1 个答案:

答案 0 :(得分:0)

正如我在Spark mailing list向我建议的那样,问题在于很多非常小的json文件。

通过将小文件合并为更大的文件或通过以下方式可以大大提高性能:

sc = SparkContext(appName="Json data preprocessor")
distData = sc.textFile(sys.argv[2]).coalesce(10)     #10 partition tasks
json_extractor = JsonExtractor(sys.argv[1])
cleanedData = distData.flatMap(json_extractor.extract_json) 
cleanedData.saveAsTextFile(sys.argv[3])