Fehler in Snowflake Notebooks beheben¶
Die folgenden Szenarios können Ihnen helfen, möglicherweise auftretende Probleme bei der Verwendung von Snowflake Notebooks zu beheben.
Gesamtzahl der Notebooks überschreitet die Beschränkung.¶
Der folgende Fehler tritt auf, wenn die Gesamtzahl der Notebooks in Ihrem Konto 6.000 übersteigt und Sie die Liste der Notebooks aktualisieren:
Result size for streamlit list exceeded the limit. Streamlit list was truncated.
Benutzer können weiterhin neue Notebooks erstellen. Snowflake empfiehlt jedoch, Notebooks zu entfernen, die nicht mehr vom Konto verwendet werden.
snowflake.core package conflict¶
Um Snowpark Python-APIs zu verwenden, verwenden Sie snowflake.core
in der Paketauswahl. Wenn Sie sowohl snowflake.core
als auch snowflake
hinzufügen, diese aber auf unterschiedliche Versionen setzen, wird ein Paketkonfliktfehler zurückgegeben.
Notebooks-(Warehouse-Laufzeit)-Fehler beim Aktualisieren eines Pakets¶
Snowflake hat das ältere snowflake-ml
-Paket als veraltet markiert, das nicht mehr unterstützt wird. Es wurde aus der Paketauswahl entfernt und ist im Snowflake Anaconda-Kanal nicht mehr verfügbar. Wenn Sie snowflake-ml
verwenden und versuchen, Pakete in Ihren Notebooks hinzuzufügen, zu entfernen oder zu aktualisieren, werden diese Notebooks fehlschlagen, da snowflake-ml
nicht mehr zugänglich ist.
Um Probleme zu vermeiden, wechseln Sie zu snowflake-ml-python
, dem richtigen Paket für Snowflake-ML.
AttributeError: NoneType
¶
Der folgende Fehler tritt auf, wenn eine Zelle in denselben Namen umbenannt wird wie eine bestehende Variable im Notebook:
AttributeError: ‘NoneType’ object has no attribute ‘sql’
In einer Python-Zelle mit dem Namen cell1
haben Sie zum Beispiel Folgendes:
session = get_active_session() #establishing a Snowpark session
Wenn Sie dann cell2
in „Sitzung“ umbenennen und in cell3
auf „Sitzung“ verweisen, versucht Notebooks, auf „Sitzung“ (den Zellnamen) und nicht auf die Snowpark-Sitzung zu verweisen, was einen Fehler verursacht.
Vorzeitige Trennung¶
Die Notebook-Sitzung wird als gespeicherte Prozedur ausgeführt. Wenn die Verbindung Ihres Notebooks unerwartet vor dem Timeout von 1 Stunde unterbrochen wird, könnte Ihr ACCOUNTADMIN oder der Warehouse-Eigentümer den Parameter STATEMENT_TIMEOUT_IN_SECONDS auf einen bestimmten Wert (z. . 5 Minuten) eingestellt haben, der die Dauer aller Anweisungen im Warehouse, einschließlich der Notebook-Sitzungen, beschränkt. Dieser Parameter wird auf der Warehouse- oder Kontoebene festgelegt. Wenn er sowohl für ein Warehouse als auch für eine Sitzung festgelegt ist, wird der niedrigste Nicht-Null-Wert durchgesetzt. Um die Laufzeit des Notebooks zu verlängern, können Sie das Standard Warehouse SYSTEM$STREAMLIT_NOTEBOOK$WAREHOUSE verwenden oder den Parameter STATEMENT_TIMEOUT_IN_SECONDS auf eine längere Dauer ändern.
Keine Verbindung aufgrund der Firewall¶
Das folgende Popup erscheint, wenn Sie versuchen, Ihr Notebook zu starten:
Something went wrong. Unable to connect. A firewall or ad blocker might be preventing you from connecting.
Vergewissern Sie sich, dass *.snowflake.app
in Ihrem Netzwerk auf der Zulassungsliste steht und eine Verbindung zu Snowflake herstellen kann. Wenn diese Domäne in der Zulassungsliste enthalten ist, können Ihre Apps ohne Einschränkungen mit Snowflake-Servern kommunizieren.
Um Probleme bei der Verbindung mit dem Snowflake Backend zu vermeiden, stellen Sie außerdem sicher, dass WebSockets in Ihrer Netzwerkkonfiguration nicht blockiert werden.
Kein aktives Warehouse ausgewählt¶
Um diesen Fehler zu beheben, geben Sie mit dem Befehl USE WAREHOUSE ein Warehouse für die Sitzung an, oder wählen Sie ein Warehouse in Ihrem Notebook aus. Wie Sie ein Warehouse für Ihr Notebook auswählen, erfahren Sie unter Warehouse-Empfehlungen für die Ausführung von Snowflake Notebooks.
Außerdem wird dieser Fehler angezeigt, wenn Sie eine Rolle verwenden, die keine Berechtigung für den Zugriff auf das Warehouse, die Datenbank oder das Schema hat, das das Notizbuch verwendet. Sie müssen in eine Rolle wechseln, die Zugriff auf diese Ressourcen hat, damit Sie Ihre Arbeit fortsetzen können.
Fehlende Pakete¶
Die folgende Meldung erscheint in einer Zellenausgabe, wenn Sie versuchen, ein Paket zu verwenden, das nicht in Ihrer Notebook-Umgebung installiert ist:
ModuleNotFoundError: Line 2: Module Not Found: snowflake.core. To import packages from Anaconda, install them first using the package
selector at the top of the page.
Importieren Sie das erforderliche Paket, indem Sie den Anweisungen auf der Seite Python-Pakete zur Verwendung in Notebooks importieren folgen.
Fehlendes Paket in vorhandenem Notebook¶
Es werden ständig neue Versionen von Notebooks veröffentlicht, und die Notebooks werden automatisch auf die neueste Version aktualisiert. Manchmal sind beim Upgrade eines alten Notebooks die Pakete in der Notebook-Umgebung nicht mit dem Upgrade kompatibel. Dies kann möglicherweise dazu führen, dass das Notebook nicht mehr startet.
Im Folgenden finden Sie ein Beispiel für eine Fehlermeldung, wenn das Paket Libpython
fehlt:
SnowflakeInternalException{signature=std::vector<sf::RuntimePathLinkage> sf::{anonymous}::buildRuntimeFileSet(const sf::UdfRuntime&, std::string_view, const std::vector<sf::udf::ThirdPartyLibrariesInfo>&, bool):"libpython_missing", internalMsg=[XP_WORKER_FAILURE: Unexpected error signaled by function 'std::vector<sf::RuntimePathLinkage> sf::{anonymous}::buildRuntimeFileSet(const sf::UdfRuntime&, std::string_view, const std::vector<sf::udf::ThirdPartyLibrariesInfo>&, bool)'
Assert "libpython_missing"[{"function": "std::vector<sf::RuntimePathLinkage> sf::{anonymous}::buildRuntimeFileSet(const sf::UdfRuntime&, std::string_view, const std::vector<sf::udf::ThirdPartyLibrariesInfo>&, bool)", "line": 1307, "stack frame ptr": "0xf2ff65553120", "libPythonOnHost": "/opt/sfc/deployments/prod1/ExecPlatform/cache/directory_cache/server_2921757878/v3/python_udf_libs/.data/4e8f2a35e2a60eb4cce3538d6f794bd7881d238d64b1b3e28c72c0f3d58843f0/lib/libpython3.9.so.1.0"}]], userMsg=Processing aborted due to error 300010:791225565; incident 9770775., reporter=unknown, dumpFile= file://, isAborting=true, isVerbose=false}
Um diesen Fehler zu beheben, versuchen Sie die folgenden Schritte:
Aktualisieren Sie die Webseite, und starten Sie das Notebook erneut.
Wenn das Problem weiterhin besteht, öffnen Sie als Nächstes die Paketauswahl, und überprüfen Sie, ob alle installierten Pakete noch gültig sind. In der Dropdown-Liste für jedes Paket sehen Sie die verfügbaren Versionen. Wenn Sie die neueste Version des Pakets auswählen, ist der Fehler normalerweise behoben.
Problem mit dem Nur-Lese-Dateisystem¶
Einige Python-Bibliotheken laden Daten in ein lokales Verzeichnis des Benutzers herunter oder speichern sie dort. Das Standard-Benutzerverzeichnis /home/udf
ist jedoch schreibgeschützt. Um dies zu umgehen, setzen Sie den Pfad auf /tmp
, das ein beschreibbarer Speicherort ist. Beachten Sie, dass die Umgebungsvariable, die zum Festlegen des Verzeichnisses zum Schreiben verwendet wird, je nach verwendeter Bibliothek variieren kann. Im Folgenden finden Sie eine Liste der bekannten Bibliotheken, bei denen dieses Problem auftritt:
matplotlib
HuggingFace
catboost
matplotlib-Beispiel¶
Die folgende Warnung erhalten Sie, wenn Sie versuchen, matplotlib zu verwenden:
Matplotlib created a temporary cache directory at /tmp/matplotlib-2fk8582w because the default path (/home/udf/.config/matplotlib) is
not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular
to speed up the import of Matplotlib and to better support multiprocessing.
Der folgende Code setzt die Variable MPLCONFIGDIR
auf /tmp/
, um dieses Problem zu beheben:
import os
os.environ["MPLCONFIGDIR"] = '/tmp/'
import matplotlib.pyplot as plt
Huggingface-Beispiel¶
Die folgende Warnung wird ausgegeben, wenn Sie versuchen, Huggingface zu verwenden:
Readonly file system: `/home/udf/.cache`
Der folgende Code setzt die Variablen HF_HOME
und SENTENCE_TRANSFORMERS_HOME
auf /tmp/
, um diesen Fehler zu beheben:
import os
os.environ['HF_HOME'] = '/tmp'
os.environ['SENTENCE_TRANSFORMERS_HOME'] = '/tmp'
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Snowflake/snowflake-arctic-embed-xs")
Ausgabemeldung von df.collect()
ist zu gro߶
Die folgende Meldung wird in der Zellenausgabe angezeigt, wenn Sie df.collect()
ausführen:
MessageSizeError: Data of size 522.0 MB exceeds the message size limit of 200.0 MB.
This is often caused by a large chart or dataframe. Please decrease the amount of data sent to the browser,
or increase the limit by setting the config option server.maxMessageSize.
Click here to learn more about config options.
Note that increasing the limit may lead to long loading times and large memory consumption of the client's browser and the Streamlit server.
Snowflake Notebooks schneidet die Ergebnisse in der Zellenausgabe für große Datenset in den folgenden Fällen automatisch ab:
Alle SQL-Zellenergebnisse.
Python-Zellenergebnisse bei einem
snowpark.Dataframe
.
Das Problem mit der obigen Zelle ist, dass df.collect()
ein List
-Objekt anstelle von snowpark.Dataframe
zurückgibt. Listen werden nicht automatisch abgeschnitten. Um dieses Problem zu umgehen, geben Sie direkt die Ergebnisse des DataFrame aus.
df
Notebook stürzt bei Verwendung von df.to_pandas()
auf Snowpark ab DataFrames.¶
Beim Ausführen von df.to_pandas()
werden alle Daten in den Speicher geladen, was dazu führen kann, dass die Notebook-Sitzung beendet wird, wenn die Datengröße die Speicherbeschränkung des zugehörigen Notebook-Warehouse überschreitet.
data = session.table("BIG_TABLE")
df = data.to_pandas() # This may lead to memory error
Im Allgemeinen empfiehlt Snowflake, bei großen Datensets die Verwendung von df.to_pandas()
zu vermeiden. Verwenden Sie stattdessen die Snowpark pandas-API, um Ihre Daten mit pandas zu bearbeiten. Mit Snowpark pandas API können Sie Ihren Pandas-Code direkt auf Ihren Daten in Snowflake ausführen, wobei die Berechnungen auf SQL verlagert werden, sodass Sie nicht darauf beschränkt sind, nur mit Daten zu arbeiten, die in den Speicher passen.
Das folgende Beispiel zeigt, wie Sie den Code umschreiben können, um die Tabelle mit Snowpark pandas einzulesen.
# Import Snowpark pandas
import modin.pandas as pd
import snowflake.snowpark.modin.plugin
# Create a Snowpark pandas DataFrame from BIG_TABLE
df = pd.read_snowflake("BIG_TABLE")
# Keep working with your data using the pandas API
df.dropna()
Weitere Informationen finden Sie unter Snowpark pandas in Notebooks.