облегченный ETL с использованием облачного хранилища Google и облачных функций с Python 3.7 - PullRequest
0 голосов
/ 06 января 2019

Я новичок в GCS и облачных функциях и хотел бы понять, как я могу создавать облегченные ETL, используя эти две технологии в сочетании с Python (3.7).

У меня есть корзина GCS под названием «Test_1233», содержащая 3 файла (все структурно идентичны). Когда новый файл добавляется в эту корзину gcs, я бы хотел, чтобы следующий код на python запускался, создавал файл «output.csv» и сохранял его в той же корзине. Код, который я пытаюсь запустить ниже:

import pandas as pd     
import glob 
import os 
import re
import numpy as np


path  = os.getcwd()  
files = os.listdir(path) ## Originally this was intentended for finding files in the local directlory - I now need this adapted for finding files within gcs(!)

### Loading Files by Variable ###
df   = pd.DataFrame()
data = pd.DataFrame()

for files in glob.glob('gs://test_1233/Test *.xlsx'): ## attempts to find all relevant files within the gcs bucket

    data = pd.read_excel(files,'Sheet1',skiprows=1).fillna(method='ffill') 
    date = re.compile(r'([\.\d]+ - [\.\d]+)').search(files).groups()[0] 
    data['Date'] = date
    data['Start_Date'], data['End_Date'] = data['Date'].str.split(' - ', 1).str
    data['End_Date'] = data['End_Date'].str[:10]
    data['Start_Date'] = data['Start_Date'].str[:10]
    data['Start_Date'] =pd.to_datetime(data['Start_Date'],format ='%d.%m.%Y',errors='coerce') 
    data['End_Date']= pd.to_datetime(data['End_Date'],format ='%d.%m.%Y',errors='coerce')
    df  = df.append(data)
    df

df['Product'] = np.where(df['Product'] =='BR: Tpaste Adv Wht 2x120g','ToothpasteWht2x120g',df['Product']) 

##Stores cleaned data back into same gcs bucket as 'csv' file
df.to_csv('Test_Output.csv')

Поскольку я совершенно новичок в этом, я не уверен, как создать правильный путь для чтения всех файлов в облачной среде (я использовал для чтения файлов из моего локального каталога!).

Любая помощь будет наиболее ценной.

Ответы [ 2 ]

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

Сначала вам нужно будет загрузить / выгрузить файлы из облачного хранилища Google в вашу среду облачных функций, используя модуль google-cloud-storage. См:

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

Если вы хотите загружать файлы из какого-то места и (временно) записывать их в локальные файлы во время выполнения облачных функций, обязательно прочитайте документацию :

Единственной записываемой частью файловой системы является каталог / tmp, который Вы можете использовать для хранения временных файлов в экземпляре функции. Это точка монтирования локального диска, известная как том «tmpfs», в который записываются данные Объем хранится в памяти. Обратите внимание, что он будет потреблять память ресурсы, выделенные для функции.

Остальная часть файловой системы доступна только для чтения и доступна для функция.

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

...