Как TRUNCATE и / или использовать подстановочные знаки с Databrick
Я пытаюсь написать скрипт в блоках данных, который будет выбирать файл на основе определенных символов в имени файла или только на отметке даты в файле.
Например, следующий файл выглядит следующим образом:
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-2222 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 ответ
Вы можете прочитать имена файлов с помощью dbutils и можете проверить, соответствует ли шаблон в операторе if: if теперь в filname. Таким образом, вместо непосредственного чтения файлов с определенным шаблоном, вы получаете список файлов, а затем копируете конкретные файлы, соответствующие вашему требуемому шаблону.
Следующий код работает в блокноте 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