如何TRUNCATE和/或使用通配符与Databrick



我正在尝试用databricks编写一个脚本,该脚本将根据文件名中的某些字符或文件中的日期戳来选择文件。

例如,以下文件如下所示:

LCMS_MRD_Delta_LoyaltyAccount_1992_1018-12-22 06-07-31

我在Databricks中创建了以下代码:

import datetime
now1 = datetime.datetime.now()
now = now1.strftime("%Y-%m-%d")

使用上面的代码,我尝试选择使用以下文件:

LCMS_MRD_Delta_LoyaltyAccount_1992_%s.csv'% now

然而,如果你仔细观察,你会注意到日期戳和时间戳之间有一个空格,即在22和06 之间

LCMS_MRD_Delta_LoyaltyAccount_1992_2018-12-22 06-07-31

这是因为如果这个空间阻止了我上面的代码工作。

我认为Databricks不支持通配符,因此以下内容不起作用:

LCMS_MRD_Delta_LoyaltyAccount_1992_%s.csv'% now

有人曾经建议删除时间戳。

有人能告诉我是否:

A。TRUNCATING将解决这个问题B.有办法找到我的代码LCMS_MRD_Delta_LoyaltyAccount_1992_%s.csv'% now

要选择整个文件吗?记住,我肯定需要根据当前日期进行选择。。我只想能够使用我的代码在文件上进行选择。

您可以使用dbutils读取文件名,并可以在if语句中检查模式是否匹配:if now in filname。因此,您可以获得一个文件列表,然后复制与所需模式匹配的具体文件,而不是直接读取具有特定模式的文件。

以下代码适用于databricks python笔记本:

1.将三个文件写入文件系统:

data = """
{"a":1, "b":2, "c":3}
{"a":{, b:3} 
{"a":5, "b":6, "c":7}
"""
dbutils.fs.put("/mnt/adls2/demo/files/file1-2018-12-22 06-07-31.json", data, True)
dbutils.fs.put("/mnt/adls2/demo/files/file2-2018-02-03 06-07-31.json", data, True)
dbutils.fs.put("/mnt/adls2/demo/files/file3-2019-01-03 06-07-31.json", data, True)

2.以列表形式读取文件名:

files=dbutils.fs.ls("/mnt/ads2/demo/files/")

3.获取实际日期:

import datetime
now = datetime.datetime.now().strftime("%Y-%m-%d")
print(now)

输出:2019-01-03

4.复制实际文件:

for i in range (0, len(files)):
file = files[i].name
if now in file:  
dbutils.fs.cp(files[i].path,'/mnt/adls2/demo/target/' + file)
print ('copied     ' + file)
else:
print ('not copied ' + file)

输出:

未复制文件1-2018-12-22 06-07-31.json

未复制文件2-2018-02-03 06-07-31.json

复制文件3-2019-01-03 06-07-31.json

相关内容

  • 没有找到相关文章