Snowpark ML FileSystem e FileSet¶
A biblioteca Snowpark ML inclui FileSystem, uma abstração semelhante a um sistema de arquivos para um estágio interno do Snowflake criptografado no lado do servidor. Especificamente, é uma implementação fsspec AbstractFileSystem. A biblioteca também inclui FileSet, uma classe relacionada que permite mover dados de machine learning de uma tabela Snowflake para o estágio e, a partir daí, alimentar os dados para PyTorch ou TensorFlow (consulte Conectores do Snowpark ML Framework).
Dica
Consulte a Referência de API do Snowpark ML para obter detalhes completos sobre estas APIs.
Nota
Este tópico pressupõe que o módulo Snowpark ML já esteja instalado. Caso contrário, consulte Instalação do Snowpark ML.
Criação e utilização de um sistema de arquivos¶
A criação de um sistema de arquivos Snowpark ML exige um objeto do conector Snowflake para Python Connection
ou um Snowpark Python Session
. Consulte Conexão ao Snowflake para obter instruções.
Depois de ter uma conexão ou uma sessão, você poderá criar uma instância do Snowpark ML SFFileSystem
por meio da qual poderá acessar dados em seu estágio interno.
Se você tiver uma conexão do conector Snowflake para Python, passe-a como o argumento sf_connection
:
import fsspec
from snowflake.ml.fileset import sfcfs
sf_fs1 = sfcfs.SFFileSystem(sf_connection=sf_connection)
Se você tiver uma sessão Snowpark Python, passe-a como o argumento snowpark_session
:
import fsspec
from snowflake.ml.fileset import sfcfs
sf_fs2 = sfcfs.SFFileSystem(snowpark_session=sp_session)
SFFileSystem
herda muitos recursos de fsspec.FileSystem
, como armazenamento em cache local de arquivos. Você pode ativar esse e outros recursos instanciando um sistema de arquivos Snowflake por meio da função de fábrica fsspec.filesystem
, passando target_protocol="sfc"
para usar a implementação do FileSystem do Snowflake:
local_cache_path = "/tmp/sf_files/"
cached_fs = fsspec.filesystem("cached", target_protocol="sfc",
target_options={"sf_connection": sf_connection,
"cache_types": "bytes",
"block_size": 32 * 2**20},
cache_storage=local_cache_path)
O sistema de arquivos do Snowflake oferece suporte à maioria dos métodos somente leitura definidos para um fsspec FileSystem
, incluindo find
, info
, isdir
, isfile
e exists
.
Especificação de arquivos¶
Para especificar arquivos em um estágio, use um caminho no formato @database.schema.stage/file_path
.
Listagem de arquivos¶
O método ls
do sistema de arquivos é usado para obter uma lista dos arquivos no estágio:
print(*cached_fs.ls("@ML_DATASETS.public.my_models/sales_predict/"), end='\n')
Abertura e leitura de arquivos¶
Você pode abrir arquivos no estágio usando o método open
do sistema de arquivos. Você pode então ler os arquivos usando os mesmos métodos usados com arquivos Python comuns. O objeto de arquivo também é um gerenciador de contexto que pode ser usado com a instrução with
do Python, portanto é fechado automaticamente quando não é mais necessário.
path = '@ML_DATASETS.public.my_models/test/data_7_7_3.snappy.parquet'
with sf_fs1.open(path, mode='rb') as f:
print(f.read(16))
Você também pode usar a instância SFFileSystem
com outros componentes que aceitam sistemas de arquivos fsspec. Aqui, o arquivo de dados Parquet mencionado no bloco de código anterior é passado para o método read_table
de PyArrow:
import pyarrow.parquet as pq
table = pq.read_table(path, filesystem=sf_fs1)
table.take([1, 3])
Componentes Python que aceitam arquivos (ou objetos semelhantes a arquivos) podem passar para um objeto de arquivo aberto do sistema de arquivos do Snowflake. Por exemplo, se você tiver um arquivo compactado com gzip em seu estágio, poderá usá-lo com o módulo gzip
do Python, passando-o para gzip.GzipFile
como o parâmetro fileobj
:
path = "sfc://@ML_DATASETS.public.my_models/dataset.csv.gz"
with cached_fs.open(path, mode='rb', sf_connection=sf_connection) as f:
g = gzip.GzipFile(fileobj=f)
for i in range(3):
print(g.readline())
Criação e utilização de um FileSet¶
Um FileSet do Snowflake representa um instantâneo imutável do resultado de uma consulta SQL na forma de arquivos em um estágio criptografado interno do lado do servidor. Esses arquivos podem ser acessados por meio de um FileSystem para alimentar dados em ferramentas como PyTorch e TensorFlow para que você possa treinar modelos em escala e dentro do seu modelo de governança de dados existente. Para criar um FileSet, use o método FileSet.make
.
Você precisa de uma conexão Snowflake Python ou de uma sessão Snowpark para criar um FileSet. Consulte Conexão ao Snowflake para obter instruções. Você também deve fornecer o caminho para um estágio criptografado interno do servidor existente ou um subdiretório nesse estágio, onde o FileSet será armazenado.
Para criar um FileSet a partir de um DataFrame do Snowpark, construa um DataFrame e passe-o para FileSet.make
como snowpark_dataframe
; não chame o método collect
do DataFrame:
# Snowpark Python equivalent of "SELECT * FROM MYDATA LIMIT 5000000"
df = snowpark_session.table('mydata').limit(5000000)
fileset_df = fileset.FileSet.make(
target_stage_loc="@ML_DATASETS.public.my_models/",
name="from_dataframe",
snowpark_dataframe=df,
shuffle=True,
)
Para criar um FileSet usando uma conexão do conector Snowflake para Python, transmita a conexão para Fileset.make
como sf_connection
e transmita a consulta SQL como query
:
fileset_sf = fileset.FileSet.make(
target_stage_loc="@ML_DATASETS.public.my_models/",
name="from_connector",
sf_connection=sf_connection,
query="SELECT * FROM MYDATA LIMIT 5000000",
shuffle=True, # see later section about shuffling
)
Nota
Consulte Embaralhamento de dados em FileSets para obter informações sobre como embaralhar seus dados usando o parâmetro shuffle
.
Use o método files
para obter uma lista dos arquivos no FileSet:
print(*fileset_df.files())
Para obter informações sobre como alimentar os dados no FileSet para PyTorch ou TensorFlow, consulte Conectores do Snowpark ML Framework.