Прочитайте файлы excel и добавьте их, чтобы создать один фрейм данных в базах данных из озера данных azure без определенных имен файлов

#excel #pandas #databricks #readfile #azure-data-lake

Вопрос:

Я храню файлы Excel в озере данных Azure (поколение 1). Они следуют именам файлов по одному и тому же шаблону «2021-06-18T09_00_07ONR_Usage_Dataset», «2021-06-18T09_00_07DSS_Usage_Dataset» и т. Д. В зависимости от даты и времени. Я хочу прочитать все файлы в папке, расположенной в озере данных Azure, в каталоги данных, не называя конкретный файл, чтобы в будущем новые файлы считывались и добавлялись, чтобы создать один большой набор данных. Все файлы имеют одинаковую схему, столбцы расположены в одном порядке и т. Д. До сих пор я пробовал циклы с регулярными выражениями:

 path = dbutils.fs.ls('/mnt/adls/40_project/UBC/WIP/Mercury/UUR_PS_raw_temp/')
for fi in path: `for fi in path: 
  print(fi)
  read = spark.read.format("com.crealytics.spark.excel").option("header", "True").option("inferSchema", "true").option("dataAddress", "'Usage Dataset'!A2").load(fi.path)
  display(read)
  print(read.count())
 

На выходе выводятся все пути, и он подсчитывает каждый считываемый набор данных, но отображает только последний. Я понимаю, потому что я не сохраняю его и не добавляю в цикл for, но когда я добавляю добавление, оно прерывается.

 appended_data = []
path = dbutils.fs.ls('/mnt/adls/40_project/UBC/WIP/Mercury/UUR_PS_raw_temp/')
    for fi in path: `for fi in path: 
      print(fi)
      read = spark.read.format("com.crealytics.spark.excel").option("header", "True").option("inferSchema", "true").option("dataAddress", "'Usage Dataset'!A2").load(fi.path)
      display(read)
      print(read.count())
      appended_data.append(read)
 

Но я получаю эту ошибку, FileInfo(путь=’dbfs:/mnt/adls/40_project/UBC/WIP/Mercury/UUR_PS_raw_temp/Initialization_DSS.xlsx’, имя=’Initialization_DSS.xlsx’, размер=39781)
Ошибка типа: не поддерживается тип: JavaObject’>

Последний способ, которым я пытался:

 li = []
for f in glob.glob('/mnt/adls/40_project/UBC/WIP/Mercury/UUR_PS_raw_temp/*_Usage_Dataset.xlsx'):
    df = pd.read_xlsx(f)  
    li.append(df)
    frame = pd.concat(li, axis =0, ignore_index = True)
 

Это говорит о том, что нет никаких объектов для объединения. Я везде исследовал и все перепробовал. Пожалуйста, помогите.

Ответ №1:

Если вы хотите использовать pandas для чтения файла excel в базах данных, путь должен быть таким /dbfs/mnt/... .

Например

 import os
import glob
import pandas as pd
li = []
os.chdir(r'/dbfs/mnt/<mount-name>/<>')
allFiles = glob.glob("*.xlsx") # match your csvs
for file in allFiles:
    df = pd.read_xlsx(f)  
    li.append(df)
    frame = pd.concat(li, axis =0, ignore_index = True)
 

Комментарии:

1. Если это полезно для вас, не могли бы вы, пожалуйста, принять это в качестве ответа ?