为什么我的Apache Spark作业比常规Python程序慢?

时间:2015-03-09 14:51:25

标签: python parallel-processing apache-spark

它只是一个计算日志文件中行数的简单程序。日志文件大约为6GB。我运行了两个程序如下:

常规Python程序

import datetime

begining = datetime.datetime.now()
if __name__ == "__main__":
    num_lines = sum(1 for line in open('/Users/victor/access.log'))
    print "The file contains of %s lines" % num_lines
    ending = datetime.datetime.now()
    print "processed in: %s" % (ending - begining)

使用Python的Spark版本

import sys
from operator import add
from pyspark import SparkContext

if __name__ == "__main__":
    sc = SparkContext(appName="PythonAccessLogAnalyzer")
    lines = sc.textFile("/Users/victor/access.log")
    # count number of line
    counts = lines.count()
    print "The file contains of %s lines" % counts

    sc.stop()

因为spark是并行处理的,我认为它应该比常规的python程序更快。但是,在我使用4个处理内核运行spark版本后,几乎 45s 完成任务,而常规程序只需 8s 为什么?如何改进Spark版本以使其比常规版本更快?

据我所知,Spark将文件拆分为多个块并并行处理它们,但仍需要一些时间来初始化作业。在这种情况下,与常规python程序处理时间(主要是加载文件)相比,初始化作业的时间太长。如果我更正, Spark版本优于常规版本的文件大小是什么?

0 个答案:

没有答案