我在Ubuntu VM上运行Spark(4GB,2核)。我正在对字数进行这种简单的测试。我将它与简单的Python dict()
计数器进行比较。我发现Pyspark慢5倍(需要更多时间)。
这是因为初始化还是需要调整参数?
import sys, os
sys.path.append('/home/dirk/spark-1.4.1-bin-hadoop2.6/python')
os.environ['SPARK_HOME']='/home/dirk/spark-1.4.1-bin-hadoop2.6/'
os.environ['SPARK_WORKER_CORES']='2'
os.environ['SPARK_WORKER_MEMORY']='2g'
import time
import py4j
from pyspark import SparkContext, SparkConf
from operator import add
conf=(SparkConf().setMaster('local').setAppName('app'))
sc=SparkContext(conf=conf)
f='big3.txt'
s=time.time()
lines=sc.textFile(f)
counts=lines.flatMap(lambda x:x.split(' ')).map(lambda x: (x,1)).reduceByKey(add)
output=counts.collect()
print len(output)
for (word, count) in output:
if count>100: print word, count
sc.stop()
print 'elapsed',time.time()-s
s=time.time()
f1=open(f,'r')
freq={}
for line in f1:
words=line.split(' ')
for w in words:
if w not in freq:
freq[w]=0
freq[w]+=1
f1.close()
print len(freq)
for (w,c) in freq.iteritems():
if c>100: print w,c
print 'elapsed',time.time()-s
答案 0 :(得分:0)
正如评论中所提到的,Spark并不适合这种短期工作。您最好在数百个文件上运行它们,每个文件的大小至少为几兆字节。即便如此,在CPU获得100%利用之前,它可能会使硬盘读取速度饱和,理想情况下,您至少拥有几台带有SSD的计算机才能从Spark获得真正的优势:)