运行 LinearRegressionwithSGD 时 Spark 未利用所有核心
Spark not utilizing all the core while running LinearRegressionwithSGD
我在本地机器上 运行 Spark(16G,8 cpu 核)。我试图在 300MB 大小的数据集上训练线性回归模型。我检查了 cpu 统计数据和程序 运行,它只执行一个线程。
文档说他们已经实现了 SGD 的分布式版本。
http://spark.apache.org/docs/latest/mllib-linear-methods.html#implementation-developer
from pyspark.mllib.regression import LabeledPoint, LinearRegressionWithSGD, LinearRegressionModel
from pyspark import SparkContext
def parsePoint(line):
values = [float(x) for x in line.replace(',', ' ').split(' ')]
return LabeledPoint(values[0], values[1:])
sc = SparkContext("local", "Linear Reg Simple")
data = sc.textFile("/home/guptap/Dropbox/spark_opt/test.txt")
data.cache()
parsedData = data.map(parsePoint)
model = LinearRegressionWithSGD.train(parsedData)
valuesAndPreds = parsedData.map(lambda p: (p.label,model.predict(p.features)))
MSE = valuesAndPreds.map(lambda (v, p): (v - p)**2).reduce(lambda x, y: x + y) / valuesAndPreds.count()
print("Mean Squared Error = " + str(MSE))
model.save(sc, "myModelPath")
sameModel = LinearRegressionModel.load(sc, "myModelPath")
我认为您想做的是明确说明要在本地上下文中使用的核心数。正如您从注释 here 中看到的那样,"local"
(这就是您正在做的)在一个线程上实例化一个上下文,而 "local[4]"
将 运行 具有 4 个内核。我相信您也可以在系统的所有内核上使用 "local[*]"
到 运行。
我在本地机器上 运行 Spark(16G,8 cpu 核)。我试图在 300MB 大小的数据集上训练线性回归模型。我检查了 cpu 统计数据和程序 运行,它只执行一个线程。 文档说他们已经实现了 SGD 的分布式版本。 http://spark.apache.org/docs/latest/mllib-linear-methods.html#implementation-developer
from pyspark.mllib.regression import LabeledPoint, LinearRegressionWithSGD, LinearRegressionModel
from pyspark import SparkContext
def parsePoint(line):
values = [float(x) for x in line.replace(',', ' ').split(' ')]
return LabeledPoint(values[0], values[1:])
sc = SparkContext("local", "Linear Reg Simple")
data = sc.textFile("/home/guptap/Dropbox/spark_opt/test.txt")
data.cache()
parsedData = data.map(parsePoint)
model = LinearRegressionWithSGD.train(parsedData)
valuesAndPreds = parsedData.map(lambda p: (p.label,model.predict(p.features)))
MSE = valuesAndPreds.map(lambda (v, p): (v - p)**2).reduce(lambda x, y: x + y) / valuesAndPreds.count()
print("Mean Squared Error = " + str(MSE))
model.save(sc, "myModelPath")
sameModel = LinearRegressionModel.load(sc, "myModelPath")
我认为您想做的是明确说明要在本地上下文中使用的核心数。正如您从注释 here 中看到的那样,"local"
(这就是您正在做的)在一个线程上实例化一个上下文,而 "local[4]"
将 运行 具有 4 个内核。我相信您也可以在系统的所有内核上使用 "local[*]"
到 运行。