如何从 adls gen 2 在 spark notebook 中自动添加新文件

How to automatically add new files in spark notebook from adls gen 2

我们可以自动将adls gen2中添加的新文件加载到spark pool notebook中吗?我在我的 spark scala 笔记本中硬编码 parquet 文件名以加载文件。我希望所有添加的新文件都自动加载到我的笔记本中。

您可以使用存储事件触发器和参数化笔记本来实现您的要求。参数化笔记本只是从管道传递参数的常规笔记本。

存储事件触发器用于在从特定存储帐户上传、复制或删除文件时启动管道的执行。这种类型的触发器开始为每个上传的文件执行管道。

执行以下步骤来实现此目的:

  • 创建笔记本并创建 filename 参数并将单元格切换为 parameter cell,如图所示(mssparkutils.notebook.exit({filename}) 仅供参考)。使用此 filename 参数编写其余代码,其值的格式为 <filename>.<extension>.

  • 现在创建一个管道,使用突触 Notebook activity。为名为 triggeringFile 的管道创建一个参数。转到笔记本 activity 并指定要将文件加载到的笔记本。

  • 为笔记本 activity 创建一个名为文件名的新参数,其值为 @pipeline().parameters.triggeringFile 引用我们将传递给此笔记本的管道参数 triggeringFile 的值。

  • 现在单击 Trigger -> New/Edit 为此管道创建触发器。选择创建一个新的触发器并指定如下指定的字段(blob 路径开头的值只是您的 ADLS gen2 文件夹的路径,如果文件直接上传到容器和 blob,您可以将其留空路径以“.parquet”结尾,因为您正在使用 parquet).

  • 点击继续后,可以看到触发参数值triggeringFile。将其值指定为 @trigger().outputs.body.fileName,它给出了触发管道的文件的文件名。

  • 发布管道和触发器。当您将任意数量的文件上传到此 ADLS gen2 存储时,这些文件中的每一个都会触发管道。我已经上传了一个名为 sample.csv 的文件,您可以看到管道执行成功,当您监控管道时,您可以看到文件名参数已成功传递给笔记本,可以进一步处理它。