You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Snowflake Streamlit应用中读取Stage中的Pickle文件?

解决Snowflake Streamlit读取Stage中Pickle模型的问题

问题原因

你当前用的session.add_import是针对Snowpark UDF/存储过程设计的文件导入机制,在Streamlit应用环境里没法可靠把Stage文件加载到应用可访问的本地路径,依赖sys._xoptions获取导入目录的方式也不适合Streamlit场景。

解决方案:用session.file.get直接下载文件

Streamlit运行在Snowflake容器环境中,可通过Snowpark的file.get方法把Stage里的文件下载到应用临时目录,再读取Pickle文件。修改后的代码如下:

import streamlit as st
from snowflake.snowpark.context import get_active_session
import pandas as pd
import os
import cachetools

# 获取当前会话
session = get_active_session()

@cachetools.cached(cache={})
def load_pickle_model(stage_file_path, local_file_name):
    # 定义本地临时路径(Streamlit允许访问/tmp目录)
    local_path = os.path.join("/tmp", local_file_name)
    
    # 从Stage下载文件到本地临时目录
    session.file.get(stage_file_path, local_path)
    
    # 读取Pickle模型
    with open(local_path, 'rb') as file:
        model = pd.read_pickle(file)
    return model

# 加载模型,同一库/ schema下可直接用@stage_demo/cox_model.pkl
cph = load_pickle_model("@stage_demo/cox_model.pkl", "cox_model.pkl")

# 测试打印模型摘要(如果模型支持该方法)
st.write(cph.summary())

关键注意事项

  • Stage路径准确性:同一数据库和Schema下直接用@stage_demo/cox_model.pkl即可,跨库需指定完整路径@database_name.schema_name.stage_demo/cox_model.pkl。
  • 临时目录权限:Streamlit在Snowflake环境中默认有权访问/tmp目录,不要用其他自定义目录,避免权限问题。
  • 缓存机制:保留cachetools.cached可避免每次运行重复下载模型,提升应用性能。

验证Stage文件存在性

如果仍无法加载,先执行以下SQL确认Stage中的文件存在:

LIST @stage_demo;

确认输出包含cox_model.pkl且路径正确。

内容的提问来源于stack exchange,提问作者neringab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:30:56