我们可以在 pyspark 的 ParamGridBuilder 中使用 for 循环吗?

Posted

技术标签:

【中文标题】我们可以在 pyspark 的 ParamGridBuilder 中使用 for 循环吗?【英文标题】:Can we use for loop in ParamGridBuilder of pyspark? 【发布时间】:2018-09-11 13:21:10 【问题描述】:

下面的代码是在 pyspark 中不带任何循环的情况下将参数添加到 paramGridBuilder 中。

from pyspark.ml.tuning import ParamGridBuilder
paramGrid = ParamGridBuilder()\
        .addGrid(lr.regParam, [0.1, 0.01]) \
        .addGrid(lr.fitIntercept, [False, True])\
        .addGrid(lr.elasticNetParam, [0.0, 0.5, 1.0])\
        .build()

我有一本这样的字典

 dict =   lr.regParam : [0.1,0.01],lr.fitIntercept:[False,True],lr.elasticNetParam:[0.0,0.5,1.0]

我们可以使用循环来构建 ParamgridBuilder 吗?它会起作用吗?

for k,v in dict.items():
    paramGrid = ParamGridBuilder().addGrid(k,v).build()

【问题讨论】:

【参考方案1】:

你可以使用reduce函数:

from functools import reduce
paramGrid  = reduce(
    lambda a,b: a.addGrid(*b),
    dict.items(),
    ParamGridBuilder(),
).build()

或使用 for 循环

paramGrid = ParamGridBuilder()
for k,v in dict.items():
    paramGrid = paramGrid.addGrid(k,v)
paramGrid = paramGrid.build()

【讨论】:

以上是关于我们可以在 pyspark 的 ParamGridBuilder 中使用 for 循环吗?的主要内容,如果未能解决你的问题,请参考以下文章

石墨或grafana可以用来监控pyspark指标吗?

PySpark 无法通过 sparkContext/hiveContext 读取 Hive ORC 事务表?我们可以使用 Pyspark 更新/删除配置单元表数据吗?

我们如何在 pyspark 的不同模块中使用相同的连接数据框用法

来自 Spark 安装的 Pyspark VS Pyspark python 包

使用 Pyspark 直接在分区文件上运行查询

udf(用户定义函数)如何在 pyspark 中工作?