【问题标题】:How to TRUNCATE and / or use wildcards with Databrick如何在 Databrick 中截断和/或使用通配符
【发布时间】:2019-05-29 03:28:05
【问题描述】:

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

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

LCMS_MRD_Delta_LoyaltyAccount_1992_2018-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

要选择整个文件?请记住,我绝对需要根据当前日期进行选择。我只是希望能够使用我的代码在文件上进行选择。

【问题讨论】:

    标签: pyspark pyspark-sql databricks azure-databricks


    【解决方案1】:

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

    以下代码适用于 databricks python notebook:

    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/adls2/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

    【讨论】:

    • 哇,如果这可行,我需要通知 Databricks 工程师。我和他们待了 90 分钟,试图弄清楚这一点。 90 分钟后,他们说他们需要更多时间并回复我。我会在接下来的 30 分钟内检查一下并回复您。哇!
    • 当你说“现在就办理入住”时,我有点困惑。
    • 我设法完全按照您的示例进行操作,并且得到了与您相同的结果 - 相信我,这对我来说是一项重大成就。但是,我现在是否应该在此处添加 now LCMS_MRD_Delta_LoyaltyAccount_1992_%s.csv'% now 并获得与此处示例中相同的结果 LCMS_MRD_Delta_LoyaltyAccount_1992_2019-01-03 06-05-52.csv
    • 能否请您分享代码,不要完全按照您的意思。你不能使用文件名,所以在我的示例中,“文件”匹配模式而不是构造它?
    • 如果您转到以下链接,您将能够查看代码。 [链接]drive.google.com/file/d/1NA8B1_pBH_vQB1mduxS7eao5BtFiY3GP/…
    猜你喜欢
    • 1970-01-01
    • 2018-06-06
    • 2019-06-29
    • 2014-07-27
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多