我正在用pyspark.ml对AWS EMR上的一个s3 bucket上的.json数据在JupyterLab笔记本上训练一个机器学习模型。这个 bucket 不是我的,但我认为访问工作正常,因为数据预处理、特征工程等工作正常。但是当我调用 cv.fit(training_data)
函数,训练过程一直运行到接近完成(由状态栏显示),但随后抛出一个错误。
Exception in thread cell_monitor-64:
Traceback (most recent call last):
File "/opt/conda/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/opt/conda/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "/opt/conda/lib/python3.7/site-packages/awseditorssparkmonitoringwidget-1.0-py3.7.egg/awseditorssparkmonitoringwidget/cellmonitor.py", line 178, in cell_monitor
job_binned_stages[job_id][stage_id] = all_stages[stage_id]
KeyError: 6571
我还没有找到任何关于这个错误的信息。到底发生了什么?
这是我的流水线。
train, test = clean_df.randomSplit([0.8, 0.2], seed=42)
va1 = VectorAssembler(inputCols="vars", outputCol="vars")
scaler = StandardScaler(inputCol="to_scale", outputCol="scaled_features")
va2 = VectorAssembler(inputCols=["more_vars","scaled_features"], outputCol="features")
gbt = GBTClassifier()
pipeline = Pipeline(stages=[va1, scaler,va2,gbt])
paramGrid = ParamGridBuilder()\
.addGrid(gbt.maxDepth, [2, 5])\
.addGrid(gbt.maxIter, [10, 100])\
.build()
crossval = CrossValidator(estimator=pipeline,
estimatorParamMaps=paramGrid,
evaluator=MulticlassClassificationEvaluator(metricName='f1'),
numFolds=3)
cvModel = crossval.fit(train)
其次,我有一个预感,我可能通过在Python 3.8中解决;我可以在EMR上安装Python 3.8吗?
我们也有同样的问题。我们使用的是Hyperopt,我们只是添加了try except来避免这个问题。错误一直出现,但它一直在运行.似乎错误影响了EMR笔记本上的spark作业内显示进度的条形图,但它完成了管道。