如何将Databricks的JSON数组作为参数/变量正确传入Azure Data Factory?
问题:如何从Databricks向Azure Data Factory(ADF)传递无反斜杠的JSON格式字符串/数组?
原实现代码
我最初用于将DataFrame转为JSON传递至ADF的Databricks代码如下:
from pyspark.sql.functions import col, to_json, struct import json for column in df.schema: df = df.withColumn(column.name, col(column.name).cast("string")) df = df.fillna('') json_df = df.select(to_json(struct(*df.columns)).alias("json")) json_array = [row["json"] for row in json_df.collect()] decoded_list = [json.loads(row_str) for row_str in json_array] dbutils.notebook.exit(json.dumps(decoded_list))
遇到的问题
在ADF中处理该笔记本输出时,出现了多类格式不兼容问题:
- 将变量类型设为数组时,代码传递的字典不符合字符串值要求;
- 将变量类型设为字符串时,ADF提示预期字符串但传入了数组;
- 若以字符串形式传递后循环处理,JSON中的反斜杠会导致WebActivity无法正确识别JSON格式。
解决方案
调整Databricks代码,移除不必要的JSON解码步骤,并修改JSON包装逻辑,确保输出无多余转义的JSON格式:
- 移除解码代码:删除以下将JSON字符串转回字典的步骤
decoded_list = [json.loads(row_str) for row_str in json_array]
- 替换为数组包装与转义处理:根据API端点要求,给每个JSON对象添加数组包裹,并替换转义引号以消除反斜杠
wrapped_json_array = ['[' + s.replace('\\"', '"') +']' for s in json_array]
- 输出处理后的内容:将处理后的
wrapped_json_array通过dbutils.notebook.exit输出
内容的提问来源于stack exchange,提问作者lifeofthenoobie
相关产品推荐
相关产品推荐

