Snowpark ML-Klassen FileSystem und FileSet¶
Die Snowpark ML-Bibliothek enthält FileSystem, eine Abstraktion, die einem Dateisystem für einen internen, serverseitig verschlüsselten Snowflake-Stagingbereich ähnelt. Genauer gesagt, handelt es sich um eine fsspec AbstractFileSystem-Implementierung. Die Bibliothek enthält auch die verwandte Klasse FileSet, mit der Sie die Daten des maschinellen Lernens aus einer Snowflake-Tabelle in den Stagingbereich verschieben und von dort PyTorch oder TensorFlow zuführen können (siehe Snowpark ML-Framework-Konnektoren).
Tipp
Alle Informationen zu diesen APIs finden Sie in der API-Referenz für Snowpark ML.
Bemerkung
Bei diesem Thema wird vorausgesetzt, dass Sie das Snowpark ML-Modul bereits installiert haben. Wenn dies nicht der Fall ist, finden Sie weitere Informationen unter Installieren von Snowpark ML.
Erstellen und Verwenden eines Dateisystems¶
Das Erstellen eines Snowpark ML-Dateisystems erfordert entweder ein Snowflake-Konnektor für Python-Connection
-Objekt oder ein Snowpark Python-Session
-Objekt. Eine Anleitung dazu finden Sie unter Verbinden mit Snowflake.
Nachdem Sie entweder eine Verbindung oder eine Sitzung eingerichtet haben, können Sie eine Snowpark ML-SFFileSystem
-Instanz erstellen, über die Sie auf Daten in Ihrem internen Stagingbereich zugreifen können.
Wenn Sie eine Verbindung zum Snowflake-Konnektor für Python haben, übergeben Sie diese als sf_connection
-Argument:
import fsspec
from snowflake.ml.fileset import sfcfs
sf_fs1 = sfcfs.SFFileSystem(sf_connection=sf_connection)
Wenn Sie eine Snowpark Python-Sitzung haben, übergeben Sie diese als snowpark_session
-Argument:
import fsspec
from snowflake.ml.fileset import sfcfs
sf_fs2 = sfcfs.SFFileSystem(snowpark_session=sp_session)
SFFileSystem
erbt viele Features von fsspec.FileSystem
, wie z. B. das lokale Caching von Dateien. Sie können dieses und andere Features aktivieren, indem Sie ein Snowflake-Dateisystem über die fsspec.filesystem
factory-Funktion instanziieren und target_protocol="sfc"
übergeben, um die Snowflake-FileSystem-Implementierung zu verwenden:
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)
Das Snowflake-Dateisystem unterstützt die meisten Nur-Lese-Methoden, die für ein fsspec-FileSystem
definiert sind, einschließlich find
, info
, isdir
, isfile
und exists
.
Spezifizieren der Dateien¶
Um die im Stagingbereich befindlichen Dateien anzugeben, verwenden Sie einen Pfad im Format @database.schema.stage/file_path
.
Auflisten der Dateien¶
Die Methode ls
des Dateisystems wird verwendet, um eine Liste der Dateien im Stagingbereich zu erhalten:
print(*cached_fs.ls("@ML_DATASETS.public.my_models/sales_predict/"), end='\n')
Öffnen und Lesen von Dateien¶
Sie können Dateien im Stagingbereich öffnen, indem Sie die Methode open
des Dateisystems verwenden. Sie können die Dateien dann mit denselben Methoden lesen, die Sie auch für normale Python-Dateien verwenden. Das Dateiobjekt ist auch ein Kontextmanager, der mit der Python-Anweisung with
verwendet werden kann, sodass es automatisch geschlossen wird, wenn es nicht mehr benötigt wird.
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))
Sie können die SFFileSystem
-Instanz auch mit anderen Komponenten verwenden, die fsspec-Dateisysteme akzeptieren. Hier wird die im vorherigen Codeblock erwähnte Parquet-Datendatei an die PyArrow-Methode read_table
übergeben:
import pyarrow.parquet as pq
table = pq.read_table(path, filesystem=sf_fs1)
table.take([1, 3])
Python-Komponenten, die Dateien (oder dateiähnliche Objekte) akzeptieren, können an ein vom Snowflake-Dateisystem geöffnetes Dateiobjekte übergeben werden. Wenn Sie in Ihrem Stagingbereich zum Beispiel eine gzip-komprimierte Datei haben, können Sie diese mit dem Python-Modul gzip
verwenden, indem Sie die Datei als fileobj
-Parameter an gzip.GzipFile
übergeben:
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())
Erstellen und Verwenden eines FileSet¶
Ein Snowflake-FileSet ein unveränderlicher Snapshot eines SQL-Abfrageergebnisses in Form von Dateien in einem internen, serverseitigen verschlüsselten Stagingbereich. Auf diese Dateien kann über ein FileSystem zugegriffen werden, um die Daten Tools wie PyTorch und TensorFlow zuzuführen, sodass Sie Modelle in großem Umfang und innerhalb Ihres bestehenden Data Governance-Modells trainieren können. Um ein FileSet zu erstellen, verwenden Sie die Methode FileSet.make
.
Zum Erstellen eines FileSet benötigen Sie eine Snowflake-Python-Verbindung oder eine Snowpark-Sitzung. Eine Anleitung dazu finden Sie unter Verbinden mit Snowflake. Sie müssen auch den Pfad zu einem bestehenden internen, serverseitig verschlüsselten Stagingbereich oder zu einem Unterverzeichnis in einem solchen Stagingbereich angeben, in dem das FileSet gespeichert wird.
Um ein FileSet aus einem Snowpark-DataFrame zu erstellen, müssen Sie einen DataFrame erstellen und diesen an FileSet.make
als snowpark_dataframe
übergeben. Rufen Sie nicht die DataFrame-Methode collect
auf:
# 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,
)
Um ein FileSet mit einer Verbindung über den Snowflake-Konnektor für Python zu erstellen, übergeben Sie die Verbindung an Fileset.make
als sf_connection
und die SQL-Abfrage als 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
)
Bemerkung
Unter Umverteilen von Daten in FileSets finden Sie Informationen für das zufällige Anordnen Ihrer Daten mithilfe des Parameters shuffle
.
Verwenden Sie die Methode files
, um eine Liste der im FileSet enthaltenen Dateien zu erhalten:
print(*fileset_df.files())
Informationen zur Zuführung der FileSet-Daten zu PyTorch oder TensorFlow finden Sie unter Snowpark ML-Framework-Konnektoren.