因此,我试图构建一个程序,遍历目录中的所有文件,然后使用spark读入这些文件并计算给定单词的示例(简单地说就是单词“word”)。我有一个python函数 get_files
它接收路径作为输入,并返回一个字符串,其中该目录中的所有文件用逗号分隔。
我试过这样做:
import pyspark
import get_files
sc = pyspark.SparkContext('local[*]')
files = get_files(<path/to/my/files>)
num = sc.flatMap(lambda x: x.split(' ')).filter(lambda x: 'word' in x).count()
对于一个120mb左右的文件夹,整个过程大约需要40分钟。如果我只是用python(没有spark)构建一个函数,遍历这些文件中的每一个,打开它们,然后计算单词,只需要几秒钟。如果这很重要的话,我运行的是4核8逻辑处理器的英特尔i5和8gbram的windows。
我尝试过几种不同的方法:这是在jupyter笔记本上运行的,但是我尝试过从python脚本和命令提示符运行它。我也尝试过手动配置内核的数量(就像 local[8]
或者 local[7]
而不是 local[*]
)或者还尝试更改一些关于工作区数量的配置值,或者调整它创建的分区的数量,但是无论哪种方式都非常慢。
我也试着跑步 localhost:4040
我可以看到它确实生成了几个分区,并且使用了所有的核心。当转到“executors”部分时,我可以看到有一个executor正在运行,使用全部8个内核。强文本
暂无答案!
目前还没有任何答案,快来回答吧!