Загрузите пакеты conda снежинки в модель Python DBT ⇐ Python

Программы на Python
Anonymous
Загрузите пакеты conda снежинки в модель Python DBT

Сообщение Anonymous »

Я пытаюсь импортировать некоторые пакеты каналов Conda Snowflake в модель Python внутри DBT. Но при запуске dbt build на моей модели я сталкиваюсь со следующей ошибкой:

Невозможно создать функцию 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
Как это работает в Snowsight
[img]https:/ /i.sstatic.net/58f8JwHO.png[/img]

Мне хотелось бы знать, чего мне не хватает. Я пробовал разные способы, но ни один из них не работает. Я всегда получаю одну и ту же ошибку. Я также пытался добавить свои пакеты на сцену и ссылаться на них в своем коде, но в конечном итоге столкнулся с той же ошибкой.

РЕДАКТИРОВАТЬ >
Сгенерированная DBT версия Python процедуры:
Изображение

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

Есть ли способ установить собственную версию Python в dbt?

Подробнее здесь: https://stackoverflow.com/questions/790 ... thon-model

Вернуться в «Python»