FileSystem et FileSet Snowpark ML¶
La bibliothèque ML de Snowpark comprend FileSystem, une abstraction similaire à un système de fichiers pour une zone de préparation interne et chiffrée de Snowflake côté serveur. Plus précisément, il s’agit d’une implémentation de fsspec AbstractFileSystem. La bibliothèque comprend également FileSet, une classe connexe qui vous permet de déplacer des données de machine learning d’une table Snowflake vers la zone de préparation, et de là, d’alimenter les données vers PyTorch ou TensorFlow (voir Connecteurs du framework Snowpark ML).
Astuce
Consultez la référence d” API Snowpark ML pour plus de détails sur ces APIs.
Note
Cette rubrique suppose que le module Snowpark ML est déjà installé. Si ce n’est pas le cas, consultez Installation de Snowpark ML.
Création et utilisation d’un système de fichiers¶
La création d’un système de fichiers Snowpark ML nécessite soit un objet Connection
Connecteur Snowflake pour Python soit une Session
Snowpark Python. Pour obtenir des instructions, voir Connexion à Snowflake.
Après avoir établi une connexion ou une session, vous pouvez créer une instance de Snowpark ML SFFileSystem
à travers laquelle vous pouvez accéder aux données de votre zone de préparation interne.
Si vous disposez d’une connexion Connecteur Snowflake pour Python, transmettez-la en tant qu’argument sf_connection
:
import fsspec
from snowflake.ml.fileset import sfcfs
sf_fs1 = sfcfs.SFFileSystem(sf_connection=sf_connection)
Si vous avez une session Snowpark Python, transmettez-la en tant qu’argument snowpark_session
:
import fsspec
from snowflake.ml.fileset import sfcfs
sf_fs2 = sfcfs.SFFileSystem(snowpark_session=sp_session)
SFFileSystem
hérite de nombreuses fonctions de fsspec.FileSystem
, telles que la mise en cache locale des fichiers. Vous pouvez activer cette fonction ainsi que d’autres en instanciant un système de fichiers Snowflake par le biais de la fonction d’usine fsspec.filesystem
, en transmettant target_protocol="sfc"
pour utiliser l’implémentation FileSystem de 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)
Le système de fichiers Snowflake prend en charge la plupart des méthodes de lecture seule définies pour un fsspec FileSystem
, y compris find
, info
, isdir
, isfile
, et exists
.
Spécification de fichiers¶
Pour spécifier des fichiers dans une zone de préparation, utilisez un chemin de la forme @database.schema.stage/file_path
.
Fichiers d’annonce¶
La méthode ls
du système de fichiers est utilisée pour obtenir la liste des fichiers de la zone de préparation :
print(*cached_fs.ls("@ML_DATASETS.public.my_models/sales_predict/"), end='\n')
Ouverture et lecture de fichiers¶
Vous pouvez ouvrir des fichiers dans la zone de préparation en utilisant la méthode open
du système de fichiers. Vous pouvez ensuite lire les fichiers en utilisant les mêmes méthodes que celles utilisées pour les fichiers Python ordinaires. L’objet fichier est également un gestionnaire de contexte qui peut être utilisé avec l’instruction with
Python, de sorte qu’il est automatiquement fermé lorsqu’il n’est plus nécessaire.
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))
Vous pouvez également utiliser l’instance SFFileSystem
avec d’autres composants qui acceptent les systèmes de fichiers fsspec. Ici, le fichier de données Parquet mentionné dans le bloc de code précédent est transmis à la méthode read_table
PyArrow :
import pyarrow.parquet as pq
table = pq.read_table(path, filesystem=sf_fs1)
table.take([1, 3])
Les composants Python qui acceptent des fichiers (ou des objets de type fichier) peuvent être transmis à un objet fichier ouvert à partir du système de fichiers Snowflake. Par exemple, si vous avez un fichier compressé en gzip dans votre zone de préparation, vous pouvez l’utiliser avec le module gzip
Python en le transmettant à gzip.GzipFile
en tant que paramètre 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())
Création et utilisation d’un FileSet¶
Un FileSet Snowflake représente un instantané immuable du résultat d’une requête SQL sous forme de fichiers dans une zone de préparation interne chiffrée côté serveur. Ces fichiers sont accessibles via un FileSystem pour alimenter en données des outils tels que PyTorch et TensorFlow afin que vous puissiez former des modèles à l’échelle et dans le cadre de votre modèle de gouvernance des données existant. Pour créer un FileSet, utilisez la méthode FileSet.make
.
Vous avez besoin d’une connexion Python Snowflake ou d’une session Snowpark pour créer un FileSet. Pour obtenir des instructions, voir Connexion à Snowflake. Vous devez également indiquer le chemin à une zone de préparation interne chiffrée côté serveur existante, ou à un sous-répertoire d’une telle zone de préparation, où sera stocké le FileSet.
Pour créer un FileSet à partir d’un DataFrame Snowpark, construisez un DataFrame et transmettez-le à FileSet.make
en tant que snowpark_dataframe
; n’appelez pas la méthode collect
du 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,
)
Pour créer un FileSet à l’aide d’une connexion Connecteur Snowflake pour Python, transmettez la connexion à Fileset.make
en tant que sf_connection
, et transmettez la requête SQL en tant que 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
)
Note
Consultez Brassage de données dans des FileSets pour obtenir des informations sur le brassage de vos données à l’aide du paramètre shuffle
.
Utilisez la méthode files
pour obtenir la liste des fichiers contenus dans le FileSet :
print(*fileset_df.files())
Pour obtenir des informations sur l’envoi des données contenues dans le FileSet à PyTorch ou TensorFlow, consultez Connecteurs du framework Snowpark ML.