我正在尝试创建一个数据工厂管道,其中一个活动(从容器或其他文件夹中)逐个注入文件名(从容器或其他文件夹中),然后按传入顺序对其进行处理。我该如何实现?
答案 0 :(得分:0)
您好,Surbhi Tayal,谢谢您的询问。按照传入顺序,我假设您的意思是发送到数据块的第一个应该是第一个完成的,而不是并行处理。
要实现此目的,您将需要以下内容:
在管道中创建一个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笔记本。