Apache spark 如何使Spark使用所有的磁芯?
我一直在UbuntuAWS盒上使用spark-1.4.1,有64GB内存和36个内核。有一个大小为965MB的文本文件,其中包含17mn行。我正在将其加载到内存中,并使用spark映射rdd,如下所示:Apache spark 如何使Spark使用所有的磁芯?,apache-spark,pyspark,Apache Spark,Pyspark,我一直在UbuntuAWS盒上使用spark-1.4.1,有64GB内存和36个内核。有一个大小为965MB的文本文件,其中包含17mn行。我正在将其加载到内存中,并使用spark映射rdd,如下所示: def clean(line): line = line.strip().replace("'","").split('\t') return (line[0], int(line[1])) data = sc.parallelize(open('data.tsv
def clean(line):
line = line.strip().replace("'","").split('\t')
return (line[0], int(line[1]))
data = sc.parallelize(open('data.tsv')).map(lambda x: clean(x)).groupByKey()
两件事:
我希望Spark能够使用我的机器中所有可用的内核(36个),但我发现只有一个CPU一直在使用。(我发现使用htop)如何才能使用所有CPU
因为它没有使用所有的CPU,这可能就是它无法处理17mn行的原因。它给了我这个错误:
1)请不要同时问两个问题:)2)在没有看到您的配置、rdd和群集管理器中的分区数的情况下,很难说Spark为什么没有利用所有内核3)索引越界建议使用一些格式不正确的行,这些行没有被
clean
函数正确处理。因此,#处理行
很可能是最重要的4)堆栈跟踪,因为文本比屏幕截图好得多。同意1,但我认为两者可能相关。我再查一下3。大约2:这是一个独立的spark应用程序。没有节点。如何查看配置?为什么open('data.tsv')
而不是sc.textFile()
?我没有意识到这是一个选项。谢谢你提醒我。那会有区别吗?一般来说会的parallelize
在本地读取数据并分发给工作人员,textFile
在每个工作人员上并行读取数据。关于配置,您可以从sc.\u conf.getAll()
开始。请给您提供完整的clean
代码?