在azure datafactory管道中一个接一个地馈送azure databrick活动中的文件名

时间:2019-06-17 11:27:50

标签: azure-pipelines azure-data-factory-2 azure-databricks

我正在尝试创建一个数据工厂管道,其中一个活动(从容器或其他文件夹中)逐个注入文件名(从容器或其他文件夹中),然后按传入顺序对其进行处理。我该如何实现?

2 个答案:

答案 0 :(得分:0)

您好,Surbhi Tayal,谢谢您的询问。按照传入顺序,我假设您的意思是发送到数据块的第一个应该是第一个完成的,而不是并行处理。

要实现此目的,您将需要以下内容:

  • 数组类型的管道变量。
  • 一种使用文件名填充数组变量的机制。它可能是GetMetadata活动或管道参数或其他内容。添加更多细节以询问是否需要帮助。
  • Databricks资源和链接服务

在管道中创建一个ForEach活动。在设置中标记“顺序”选项。否则,您的活动将被并行发送,而不是一个接一个地发送。 在设置中,在“项目”中引用数组变量。该表达式看起来像@variables('myVariableName')。 在ForEach活动的活动中,放置一个Databricks类型的活动。选项为“笔记本”,“ Jar”和“ Python”。对于我来说,我使用了笔记本。由于UI的“浏览”选项,笔记本更容易设置。将活动设置为首先使用适当的链接服务。设置“ Python文件” /“笔记本路径” /“主类名称”。 展开“参数”部分,然后添加一个新参数。为参数指定与Databricks脚本中相同的名称。该值应为@string(item())(如果您的可枚举不是简单的基元数组,则可能会有所不同)。这将从ForEach活动中获取项目,并确保它是字符串。 如有必要,设置库。

当您尝试运行/调试时,请注意Databricks可能需要很长时间才能启动集群。这样会增加管道的运行时间。

答案 1 :(得分:0)

根据源类型和文件提取的频率,也可以选择使用Spark结构化流。对于流数据源,还支持将文件作为源-读取写入目录的文件作为数据流。支持的文件格式为text,csv,json,orc,parquet(有关最新列表,请参见DataStreamReader界面的文档,以及每种文件格式的受支持选项)。请注意,文件必须原子地放在给定目录中,在大多数文件系统中,这可以通过文件移动操作来实现。

streamingInputDF = (
  spark
    .readStream           # Similar to Batch just using `readStream` instead of `read`
    .schema(jsonSchema)               
    .json(inputPath)
)

如果您不想永久运行笔记本,请使用一次触发选项。使用触发器一次选项输出一次写入可用数据,如果没有该选项,输出流将永久运行:

streamingOutputDF \
    .coalesce(1) \
    .writeStream \
    .format("parquet") \
    .partitionBy('ingest_date') \
    .option("checkpointLocation", checkPointPath) \
    .option("path", targetPath) \
    .trigger(once=True) \
    .start()

在这种情况下,您可以使用Data Factory触发不带参数的Databricks笔记本。