如何以特定顺序使用 Databricks dbutils 复制文件

Posted

技术标签:

【中文标题】如何以特定顺序使用 Databricks dbutils 复制文件【英文标题】:How to Copy Files with Databricks dbutilis in particular order 【发布时间】:2019-01-11 11:04:39 【问题描述】:

该小组的一名成员帮助我根据日期将文件复制到关注者

copy based on date

我想调整代码以根据文件名中的某些字符复制文件 - 在下面的示例中,字符是 1111、1112、1113 和 1114 所以,如果我们有如下四个文件:

File_Account_1111_exam1.csv File_Account_1112_testxx.csv File_Account_1113_pringle.csv File_Account_1114_sam34.csv

仅当 File_Account_1113_pringle.csv 已复制到文件夹时,我才希望将 File_Account_1114_sam34.csv 复制到文件夹中。 同样,如果 File_Account_1112_testxx.csv 已经被复制到文件夹等等,我只想复制 File_Account_1113_pringle.csv。

因此,如果所有文件都已复制到一个文件夹中,它将如下所示:

dbutils.fs.put("/mnt/adls2/demo/files/file_Account_1111_exam1.csv", data, True)
dbutils.fs.put("/mnt/adls2/demo/files/file_Account_1112_testxx.csv", data, True)
dbutils.fs.put("/mnt/adls2/demo/files/file_Account_1113_pringle.csv", data, True)
dbutils.fs.put("/mnt/adls2/demo/files/file_Account_1114_sam34.csv", data, True)

【问题讨论】:

看起来您正在尝试使用复制文件操作来实现一些业务逻辑,这将是复杂的自动测试和维护。更直接、灵活和可测试的是复制所有可用文件,然后在数据管道级别应用业务逻辑。 @DavidGreenshtein,是的,我正在尝试实现业务逻辑。但是,我很挣扎。 复制操作完成后如何读取文件? @DavidGreenshtein,我做了一个 spark.read.csv。我很欣赏这个问题的复杂性,但是我希望如果没有人能够提供答案,那么也许有人可以让我朝着正确的方向寻求解决方案? 我正在尝试通过改进此处的问题来解除 *** 的禁令,因为我的得分为 -1。但我看不出我应该在哪里编辑这个问题来改进它并解除禁令。有人可以让我知道为什么这是一个坏问题吗?以及如何改进? 【参考方案1】:

在将文件上传到 DBFS 时不要应用任何业务逻辑,我建议上传所有可用文件,然后使用 test = sc.wholeTextFiles("pathtofile") 读取它们,这将返回文件名和文件内容的键/值 RDD,这里是对应的thread。一旦完成,任何基于文件名的排序或过滤业务逻辑都可以在 Spark 作业中实现和测试。

希望对你有帮助。

【讨论】:

以上是关于如何以特定顺序使用 Databricks dbutils 复制文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中使用OpenCV以特定顺序显示图像?

如何对大量 csv 文件进行排序以按特定顺序读取它们?

Spark UDF:如何在每一行上编写一个 UDF 以提取嵌套结构中的特定值?

如何以特定顺序多次显示mysql记录

如何使`getfacl`以特定顺序运行?

如何使多个 Spring HandlerInterceptor 以特定顺序执行