好的,所以我是Apache Spark的新手,我尝试使用Python运行一些基本脚本来了解它的样子。现在,我正在尝试以下使用Pyspark的Python脚本来计算某个单词(在此示例中,单词“ word”)出现在目录中一堆Python文件中的实例:
from pyspark import SparkContext
import sys
import os
def get_files(path):
ls = ''
for i in os.walk(path):
directory, ls_files = i[0], i[2]
for file in ls_files:
if file.endswith('.py') and not file.startswith('_'):
path = os.path.join(directory, file)
ls += path
ls += ','
return ls[0:-1]
if __name__ == '__main__':
if len(sys.argv) != 2:
print('This program only accpets one argument as input.')
else:
files = get_files(sys.argv[1])
sc = SparkContext()
num = sc.textFile(files).flatMap(lambda x: x.split(' ')).filter(lambda x: 'word' in x).count()
print(f'********* \'word\' appears {num} times')
如您所见,我正在使用SparkConf的所有默认选项。
好吧,如果我尝试在Windows上运行此简单程序,并将大约10MB的文件夹和460个.py文件作为参数传递,则大约需要3分钟。在同一台计算机上,我使用Ubuntu在同一文件夹中尝试完全相同的操作,而这实际上需要3秒钟。
如何解释如此巨大的时间差异?我可以理解,也许其中一些程序是为Unix系统设计的,但最终,它是同一处理器,可以在所有8个内核上并行运行多个任务,所以这实际上没有多大意义对我来说,它在Windows上是如此缓慢。