我有针对单台计算机(在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是否应该如此慢。
答案 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])