正如建议的那样鲍勃,我也建议不要这样做(从突触笔记本调用突触管道),因为火花池。
但是如果你想尝试一下,你可以通过 REST API 以外的这种方法。
在此,我添加了一个存储事件触发到突触管道它触发使用突触笔记本代码写入存储.
为此,您需要一个存储帐户和一个空容器。
首先创建一个ADLS Gen2 的链接服务在突触和突触管道的存储事件触发器中。
在 Synapse 笔记本中,将 json 文件写入触发管道的 ADLS。
您可以使用相同的 json 从突触笔记本传递参数。
带有示例参数的 Synapse 笔记本中的代码:
from pyspark.sql.types import *
myjson=[{"Name":"Rakesh","Age":22,"Marks":90}]
schema2=StructType([StructField('Name',StringType(),True),StructField('Age',IntegerType(),True),StructField('Marks',IntegerType(),True)])
df = spark.createDataFrame(data=myjson,schema=schema2)
df.show(truncate=False)
df2=df.toPandas()
df2.reset_index().to_json('abfss://input/myjson.json', storage_options = {'linked_service' : 'AzureDataLakeStorage1'},orient='records')
这里input 是我的容器,AzureDataLakeStorage1 是我的链接服务。 orient='records' 给出带有参数的索引。
这将在 ADLS 容器中创建myjson.json 文件,如下所示。
上述文件触发 Synapse 管道。要使用我们传递的参数,请使用管道中的查找活动。
查找活动:
在查找中,不要在数据集中给出任何数据集值。将通配符路径文件指定为*.json。
查找将给出如下结果:
您可以使用表达式@activity('Lookup1').output.value[0].Age 和
@activity('Lookup1').output.value[0].Name 像这样在突触管道中访问具有自己数据类型的参数。
例如在设置变量活动中:
输出:
由于变量仅支持字符串、布尔值和数组,我已将其转换为字符串以显示输出。您可以在任何地方使用这些参数。