我尝试使用
pysparkling.ml.H2OMOJOModel
使用在 AWS Glue 作业中使用 h2o==3.32.0.2 训练的 MOJO 模型来预测 Spark 数据帧,但出现了错误:TypeError: 'JavaPackage' object is not callable。
我在 AWS 支持中开了一张票,他们确认 Glue 环境没问题,问题可能出在苏打水 (pysparkling) 上。似乎缺少一些依赖库,但我不知道是哪个。 如果我在本地计算机上运行,下面的简单代码可以完美运行(我只需要更改 GBM_grid__1_AutoML_20220323_233606_model_53.zip 的 mojo 路径)
有人可以在胶水作业中成功使用苏打水吗?
职位详情: -胶水版本2.0 --附加-python-模块,h2o-pysparkling-2.4==3.36.0.2-1 -工人类型:G1.X -工人人数:2人 -使用脚本“createFromMojo.py”
createFromMojo.py:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import pandas as pd
from pysparkling.ml import H2OMOJOSettings
from pysparkling.ml import H2OMOJOModel
# from pysparkling.ml import *
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ["JOB_NAME"])
#Job setup
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args["JOB_NAME"], args)
caminho_modelo_mojo='s3://prod-lakehouse-stream/modeling/approaches/GBM_grid__1_AutoML_20220323_233606_model_53.zip'
print(caminho_modelo_mojo)
print(dir())
settings = H2OMOJOSettings(convertUnknownCategoricalLevelsToNa = True, convertInvalidNumbersToNa = True)
model = H2OMOJOModel.createFromMojo(caminho_modelo_mojo, settings)
data = {'days_since_last_application': [3, 2, 1, 0], 'job_area': ['a', 'b', 'c', 'd']}
base_escorada = model.transform(spark.createDataFrame(pd.DataFrame.from_dict(data)))
print(base_escorada.printSchema())
print(base_escorada.show())
job.commit()
我可以按照以下步骤成功运行: