Невозможно создать функцию Python с указанными пакетами. Пожалуйста, проверьте спецификацию вашего пакета и повторите попытку.
Но когда я компилирую тот же код в DBT Cloud IDE и запускаю его, в Snowsight все работает отлично (мне нужно выбрать пакеты, которые я хочу импортировать, на вкладке «Пакеты anaconda» в разделе «Пакеты» внутри Snowsight).
Вот код моей модели:
Код: Выделить всё
from datetime import datetime
import pandas as pd
from snowflake.snowpark.functions import col
from sklearn.feature_extraction.text import TfidfVectorizer
import faiss
import numpy as np
def model(dbt, session):
dbt.config(
packages = [
'faiss-cpu',
'numpy',
'pandas',
'scikit-learn',
]
)
scrapped_products = dbt.ref('mart_dwh__d_products').to_pandas()
scrapped_products['PRODUCT_NAME'] = scrapped_products['PRODUCT_NAME'].str.normalize('NFKD').str.encode('ascii', errors='ignore').str.decode('utf-8')
scrapped_products['PRODUCT_NAME'] = scrapped_products['PRODUCT_NAME'].str.upper()
scrapped_products['PRODUCT_NAME'] = scrapped_products['PRODUCT_NAME'].str.replace('[^a-zA-Z0-9 ]', ' ', regex=True)
scrapped_products['PRODUCT_NAME'] = scrapped_products['PRODUCT_NAME'].str.replace(' +', ' ', regex=True)
customer_products = dbt.ref('seed__mil_products_catalog').to_pandas()
customer_products['PRODUCT_NAME'] = customer_products['PRODUCT_NAME'].str.normalize('NFKD').str.encode('ascii', errors='ignore').str.decode('utf-8')
customer_products['PRODUCT_NAME'] = customer_products['PRODUCT_NAME'].str.upper()
customer_products['PRODUCT_NAME'] = customer_products['PRODUCT_NAME'].str.replace('[^a-zA-Z0-9 ]', ' ', regex=True)
customer_products['PRODUCT_NAME'] = customer_products['PRODUCT_NAME'].str.replace(' +', ' ', regex=True)
tfidf_vectorizer = TfidfVectorizer(analyzer='char', ngram_range=(1, 3))
scrapped_product_vectors = tfidf_vectorizer.fit_transform(scrapped_products['PRODUCT_NAME']).toarray()
customer_product_vectors = tfidf_vectorizer.transform(customer_products['PRODUCT_NAME']).toarray()
d = scrapped_product_vectors.shape[1]
index = faiss.IndexFlatL2(d)
index.add(np.array(scrapped_product_vectors, dtype=np.float32))
distances, indices = index.search(np.array(customer_product_vectors, dtype=np.float32), 1)
match_result = []
for i, (scrapped_idx, customer_idx) in enumerate(zip(indices, distances)):
match_result.append({
'CUSTOMER_PRODUCT_ID': customer_products.iloc[i]['PRODUCT_ID'], # ID of the current customer product
'SCRAPPED_PRODUCT_ID': scrapped_products.iloc[scrapped_idx[0]]['ID'], # Matched scrapped product ID
'SIMILARITY_RATIO': 1 / (1 + customer_idx[0]), # Convert Euclidean distance to a similarity score
'PROCESSED_AT': datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f") # Timestamp of processing
})
final_df = pd.DataFrame(match_result)
session.use_database(dbt.this.database)
session.use_schema(dbt.this.schema)
return_df = session.create_dataframe(final_df)
return return_df
[img]https:/ /i.sstatic.net/58f8JwHO.png[/img]
Мне хотелось бы знать, чего мне не хватает. Я пробовал разные способы, но ни один из них не работает. Я всегда получаю одну и ту же ошибку. Я также пытался добавить свои пакеты на сцену и ссылаться на них в своем коде, но в конечном итоге столкнулся с той же ошибкой.
РЕДАКТИРОВАТЬ >
Сгенерированная DBT версия Python процедуры:

Ошибка при попытке использовать Python 3.8 в SnowSight:

Есть ли способ установить собственную версию Python в dbt?
Подробнее здесь: https://stackoverflow.com/questions/790 ... thon-model