运行 pyspark svm 模型时 CPU 使用率低

Posted

技术标签:

【中文标题】运行 pyspark svm 模型时 CPU 使用率低【英文标题】:Low CPU usage while run pyspark svm model 【发布时间】:2020-11-28 11:33:47 【问题描述】:

我正在尝试在非常大的数据集上运行 svm,但我无法使用 sklearn 运行。使用 sklearn 需要无穷无尽的时间。所以我决定使用 pyspark 这是我的火花配置

[('spark.app.id', 'local-1606562652917'),
 ('spark.executor.id', 'driver'),
 ('spark.app.name', 'SVM'),
 ('spark.driver.maxResultSize', '6g'),
 ('spark.driver.port', '60042'),
 ('spark.executor.cores', '6'),
 ('spark.rdd.compress', 'True'),
 ('spark.serializer.objectStreamReset', '100'),
 ('spark.master', 'local[*]'),
 ('spark.submit.pyFiles', ''),
 ('spark.submit.deployMode', 'client'),
 ('spark.driver.host', '192.168.56.1'),
 ('spark.ui.showConsoleProgress', 'true'),
 ('spark.cores.max', '6')]

这里是火花会话

spark = SparkSession.builder \
    .appName('SVM') \
    .master('local[*]') \
    .getOrCreate()

这是 SVM 代码

from pyspark.ml.classification import LinearSVC,OneVsRest
clf = OneVsRest(classifier=LinearSVC(labelCol='label', featuresCol='features'))
clf = clf.fit(train)

当我通过任务管理器查看时,CPU 消耗低于 10%。

【问题讨论】:

Spark 有惰性求值,在你调用类似show()toPandas() 之前不会计算任何内容。所以不会有cpu消耗 所以在将 svm 拟合到数据时 spark 不会很快 不,如果你运行得当,它会非常快。查看 spark ML 文档以获取示例。 spark.apache.org/docs/latest/api/python/pyspark.ml.html @mck 请考虑将其发布为答案 它会运行得很快如果你有一个集群;仅在单台机器上运行 Spark 肯定不会运行得更快,因此不建议这样做。 【参考方案1】:

Spark 具有惰性求值,在您调用 df.show()df.toPandas() 之类的名称之前不会计算任何内容。所以在 Spark 开始评估之前完全不会消耗 CPU。

正如@desertnaut 所建议的,对于 Spark 的性能,它将取决于您拥有的硬件,例如它在集群上会很快,但在单台机器上会很慢。

【讨论】:

以上是关于运行 pyspark svm 模型时 CPU 使用率低的主要内容,如果未能解决你的问题,请参考以下文章

如何将 LIBSVM 模型(使用 LIBSVM 保存)读入 PySpark?

如何用 Pyspark 的 SVM 拟合两个 numpy 矩阵?

如何使用 bagging 集成 SVM 和 CNN 分类器?

尝试使用 pyspark 访问 greenplum 表时出错

SVM模型进行分类预测时的参数调整技巧

无法在 SVM 模型中使用日期时间数据