Как TRUNCATE и / или использовать подстановочные знаки с Databrick - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь написать скрипт в блоках данных, который будет выбирать файл на основе определенных символов в имени файла или только на отметке даты в файле.

Например, следующий файл выглядит следующим образом:

LCMS_MRD_Delta_LoyaltyAccount_1992_2018-12-22 06-07-31

Я создал следующий код в блоках данных:

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

Кто-то однажды предложил TRUNCATING timestamp.

Может кто-нибудь сообщить мне, если:

A.TRUNCATING решит эту проблему B. Есть ли путь к моему коду LCMS_MRD_Delta_LoyaltyAccount_1992_%s.csv'% now

Чтобы выбрать весь файл?Имея в виду, мне определенно нужно выбирать на основе текущей даты .. Я просто хочу иметь возможность использовать мой код для выбора в файле.

1 Ответ

0 голосов
/ 03 января 2019

Вы можете прочитать имена файлов с помощью dbutils и можете проверить, соответствует ли шаблон в операторе if: если теперь в имени файла .Поэтому вместо непосредственного чтения файлов с определенным шаблоном вы получаете список файлов, а затем копируете конкретные файлы, соответствующие требуемому шаблону.

Следующий код работает в записной книжке 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 / 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

...