Azure / Azure/MachineLearningNotebooks

Can't pass DataRerence to DatabricksStep

Open
#1,608 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Jupyter Notebook
Stars
4.4k
Forks
2.6k
PR merge metrics
No merged PRs in 30d

Description

When passing a DataReference to my DatabricksStep:

```
day_files = DataReference(datastore=ds,
path_on_datastore='day_files',
data_reference_name='day_files',
)

python_script_name = "calculate_responsible_turnover.py"
source_directory = "./"

calculate_responsible_turnover_step = DatabricksStep(name="calculate_responsible_turnover",
python_script_params=['--data-path', day_files],
inputs=[day_files],
num_workers=1,
python_script_name=python_script_name,
source_directory=source_directory,
run_name='calculate_responsible_turnover',
compute_target=databricks_compute,
allow_reuse=False
)
```

I'm getting the error:

```
Traceback (most recent call last):
File "/opt/project/collect_data/main.py", line 39, in
calculate_responsible_turnover_step = DatabricksStep(name="calculate_responsible_turnover",
File "/opt/conda/lib/python3.8/site-packages/azureml/pipeline/steps/databricks_step.py", line 398, in __init__
super(DatabricksStep, self).__init__(
File "/opt/conda/lib/python3.8/site-packages/azureml/pipeline/core/_databricks_step_base.py", line 385, in __init__
self._params["python_script_params"] = self._encode_string_params(python_script_params)
File "/opt/conda/lib/python3.8/site-packages/azureml/pipeline/core/_databricks_step_base.py", line 578, in _encode_string_params
final_params_list.append(value.replace("|", "|-"))
AttributeError: 'DataReference' object has no attribute 'replace'
```

Seems like the DatabricksStep is expecting a string, but if I typecast my DataReference as a string, it becomes `$AZUREML_DATAREFERENCE_day_files` instead of the actual path. I'm running the following packages:
```
- azureml-sdk==1.34.0
- azureml-core==1.34.0
- azureml-pipeline-core==1.34.0
- azureml-datadrift==1.21.0
- azureml-telemetry==1.23.0
- azure-keyvault-secrets==4.2.0
- azureml-pipeline-steps==1.34.0
```
Any suggestions on how to proceed with this problem?

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with the failing _encode_string_params call in azureml/pipeline/core/_databricks_step_base.py and the DatabricksStep constructor in azureml/pipeline/steps/databricks_step.py. Reproduce the example with azureml SDK 1.34.0, then determine the supported way to pass a DataReference to python_script_params and verify that the generated Databricks step receives the intended reference or path.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
machine-learning
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
32/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.