无法删除 Azure Synapse AutoML 需求预测错误:提供了参数 [y] 的无效值

Posted

技术标签:

【中文标题】无法删除 Azure Synapse AutoML 需求预测错误:提供了参数 [y] 的无效值【英文标题】:Unable to remove Azure Synapse AutoML demand forecasting error: An invalid value for argument [y] was provided 【发布时间】:2021-07-05 03:13:25 【问题描述】:

我正在尝试使用 Spark 和 SQL 上下文在 Synapse Notebook 中使用 Azure AutoML 构建一个简单的需求预测模型。

根据日期和商品 ID 汇总商品数量后,event_file_processed.parquet 文件中的数据如下所示:

日期范围为 2020 年 8 月 13 日至 2021 年 2 月 8 日。

我正在关注 MS 的此文档:https://docs.microsoft.com/en-us/azure/machine-learning/how-to-auto-train-forecast

以下是我划分train_datatest_data parquet 文件的方法:

%%sql
CREATE OR REPLACE TEMPORARY VIEW train_data
AS SELECT 
*
FROM
event_file_processed
WHERE
the_date <= '2020-12-20'
ORDER BY
the_date ASC`

%%sql
CREATE OR REPLACE TEMPORARY VIEW test_data
AS SELECT 
*
FROM
event_file_processed
WHERE
the_date > '2020-12-20'
ORDER BY
the_date ASC`

%%pyspark
train_data = spark.sql("SELECT * FROM train_data")
train_data.write.parquet("train_data.parquet")

test_data = spark.sql("SELECT * FROM test_data")
test_data.write.parquet("test_data.parquet")`

以下是我的 AutoML 设置和运行提交:

from azureml.automl.core.forecasting_parameters import ForecastingParameters

forecasting_parameters = ForecastingParameters(time_column_name='the_date', 
                                               forecast_horizon=44,
                                               time_series_id_column_names=["items_id"],
                                               freq='W',
                                               target_lags='auto',
                                               target_aggregation_function = 'sum',
                                               target_rolling_window_size = 3,
                                               short_series_handling_configuration = 'auto'
                                               )

train_data = spark.read.parquet("train_data.parquet")
train_data.createOrReplaceTempView("train_data")

label = "total_item_qty"

from azureml.core.workspace import Workspace
from azureml.core.experiment import Experiment
from azureml.train.automl import AutoMLConfig
import logging

automl_config = AutoMLConfig(task='forecasting',
                             primary_metric='normalized_root_mean_squared_error',
                             experiment_timeout_minutes=15,
                             enable_early_stopping=True,
                             training_data=train_data,
                             label_column_name=label,
                             n_cross_validations=3,
                             enable_ensembling=False,
                             verbosity=logging.INFO,
                             forecasting_parameters = forecasting_parameters)

from azureml.core import Workspace, Datastore

# Enter your workspace subscription, resource group, name, and region.
subscription_id = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" #you should be owner or contributor
resource_group = "XXXXXXXXXXX" #you should be owner or contributor
workspace_name = "XXXXXXXXXXX" #your workspace name

ws = Workspace(workspace_name = workspace_name,
               subscription_id = subscription_id,
               resource_group = resource_group)
               
experiment = Experiment(ws, "AML-demand-forecasting-synapse")
local_run = experiment.submit(automl_config, show_output=True)
best_run, fitted_model = local_run.get_output()

我严重陷入以下错误:

Error:

DataException: DataException:
Message: An invalid value for argument [y] was provided.
InnerException: InvalidValueException: InvalidValueException:
Message: Assertion Failed. Argument y is null. Target: y. Reference Code: b7440909-05a8-4220-b927-9fcb43fbf939
InnerException: None
ErrorResponse

我检查了total_item_qty 中没有空值或流氓值,这 3 个变量的架构中的类型也是正确的。

如果您能提出一些建议,我将不胜感激。

谢谢, 山塔努耆那教

【问题讨论】:

【参考方案1】:

假设您没有使用 Synapse UI 生成的笔记本。如果您使用 Synapse 中的向导,它实际上会生成一个 PySpark 笔记本,您可以运行和调整它。 此处描述了该体验:https://docs.microsoft.com/en-us/azure/synapse-analytics/machine-learning/tutorial-automl

有两个问题:

    由于您是从 Synapse 运行的,因此您可能打算在 Spark 计算上运行 AutoML。在这种情况下,您需要将 spark 上下文传递给 AutoMLConfig 构造函数:spark_context=sc

    其次,您似乎将 Spark DataFrame 作为训练数据传递给 AutoML。 AutoML 目前仅支持 Spark 场景中的 AML 数据集 (TabularDataset) 输入类型。您可以像这样进行转换:

df = spark.sql("SELECT * FROM default.nyc_taxi_train")
datastore = Datastore.get_default(ws)
dataset = TabularDatasetFactory.register_spark_dataframe(df, datastore, name = experiment_name + "-dataset")
automl_config = AutoMLConfig(spark_context = sc,....)

还想详细了解您的用例以及您打算如何在 Synapse 中使用 AutoML。如果您有兴趣就该主题进行交流,请告诉我。

谢谢, Nellie(来自 Azure Synapse 团队)

【讨论】:

以上是关于无法删除 Azure Synapse AutoML 需求预测错误:提供了参数 [y] 的无效值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Azure Synapse 在 Databricks 上删除表或删除行?

Azure Synapse 文件无法打开错误

SqlServerRegionDoesNotAllowProvisioning:无法创建 Azure Synapse Analytics 工作区

Azure Synapse Studio - 无法创建 SQL 池

Azure CLI - 无法创建 Azure Synapse 链接服务 - 引用 JSON 文件的问题

无法在 Azure Synapse Analytics 中创建表