我的流式代码出现问题 > SnowparkPandasException: (1114): Cannot write pandas DataFrame to table

问题描述 投票:0回答:1

我需要创建一个表单来对供应商进行从 1 到 10 的评分,添加自由文本评论并保存 结果到我命名为“RESULTAT_SUPPLIERS”的表中。然而,这个表与我存放的表的架构不同,只是为了让您知道,我使用 SFC_SAMPLES.TPCH_SF1。

# Import libraries
from snowflake.snowpark.context import get_active_session
from snowflake.snowpark.functions import sum, col, to_date, year
import calendar 
import altair as alt
import streamlit as st
import pandas as pd
import snowflake.snowpark as snowpark

# Set page config
st.set_page_config(layout="wide")

# Get current session
session = get_active_session()

def load_data():
    # Load Supplier data
    snow_df_supplier = session.table("SFC_SAMPLES.TPCH_SF1.SUPPLIER")

    # Load Line Item data
    snow_df_lineitem = session.table("SFC_SAMPLES.TPCH_SF1.LINEITEM")

    return snow_df_supplier, snow_df_lineitem

# Load and cache data
snow_df_supplier, snow_df_lineitem = load_data()

# Sidebar - Supplier filter
st.sidebar.header('Supplier Filter')
selected_supplier = st.sidebar.selectbox('Select Supplier:', snow_df_supplier.select('S_NAME').distinct().collect())
filtered_supplier_df = snow_df_supplier.filter(col('S_NAME') == selected_supplier)

# Display supplier information
st.header(f"Supplier Information - {selected_supplier}")
st.table(filtered_supplier_df.select('S_NAME', 'S_ADDRESS','S_NATIONKEY','S_PHONE').to_pandas())

# Display revenue year over year with a bar chart for the selected supplier(s)
st.header(f"Revenue Year Over Year for Selected Supplier")

# Format the L_COMMITDATE to 'YYYY-MM-DD'
snow_df_lineitem = snow_df_lineitem.withColumn('L_COMMITDATE', to_date(snow_df_lineitem['L_COMMITDATE']))

# Filter data for the selected supplier
filtered_lineitem_df = snow_df_lineitem.filter(col('L_SUPPKEY') == filtered_supplier_df.select('S_SUPPKEY').collect()[0]['S_SUPPKEY'])

# Extract the year from L_COMMITDATE
filtered_lineitem_df = filtered_lineitem_df.withColumn('Year', year('L_COMMITDATE'))

# Calculate revenue by grouping by Year and summing L_EXTENDEDPRICE
revenue_df = filtered_lineitem_df.groupBy('Year').agg(sum('L_EXTENDEDPRICE').alias('REVENUE')).toPandas()

st.write(revenue_df)

# Display Altair bar chart
chart = alt.Chart(revenue_df).mark_bar().encode(
    x='Year:O',
    y='REVENUE',
    tooltip=['Year:O', 'REVENUE']
).properties(width=800, height=400)

st.altair_chart(chart, use_container_width=True)

# Streamlit config
st.header("Supplier Grading Form")

# Get supplier name from the user
selected_supplier = st.text_input('Supplier Name:')

# Get grade and comment from the user
grade = st.slider('Grade (1 to 10):', min_value=1, max_value=10, step=1)
comment = st.text_area('Free Text Comment:')
submit_button = st.button('❄️ Submit to Snowflake')

# Connect to Snowflake
session = snowpark.session._get_active_session()

# Setup the ability to save user-entered allocations and predicted value back to Snowflake
if submit_button:
    with st.spinner("Making snowflakes..."):
        # Prepare data to insert into the table
        data_to_insert = [(selected_supplier, grade, comment)]
        columns = ['Supplier', 'Grade', 'Comment']
        insert_df = pd.DataFrame(data_to_insert, columns=columns)

        # Write data to Snowflake table
        session.write_pandas(insert_df, "M_HENRY_DB.PUBLIC.RESULTAT_SUPPLIERS")  
        
        st.success("✅ Successfully wrote the grading to your Snowflake account!")
        st.snow()

返回给我:

SnowparkPandasException: (1114): Cannot write pandas DataFrame to table "M_HENRY_DB.PUBLIC.RESULTAT_SUPPLIERS" because it does not exist. Create table before trying to write a pandas DataFrame

但是,我的另一张桌子上有这张桌子,所以我不明白。

dataframe snowflake-cloud-data-platform streamlit
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.