إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
توضح هذه المقالة كيفية نشر نقطة نهاية خدمة ميزة والاستعلام فيها في عملية خطوة بخطوة. تستخدم هذه المقالة Databricks SDK. يمكن أيضا إكمال بعض الخطوات باستخدام واجهة برمجة تطبيقات REST أو واجهة مستخدم Databricks وتضمين مراجع إلى الوثائق لهذه الطرق.
في هذا المثال، لديك جدول مدن مع مواقعها (خط العرض وخط الطول) والتطبيق التوصية الذي يأخذ في الاعتبار المسافة الحالية للمستخدم من تلك المدن. نظرا لأن موقع المستخدم يتغير باستمرار، يجب حساب المسافة بين المستخدم وكل مدينة في وقت الاستدلال. يوضح هذا البرنامج التعليمي كيفية إجراء هذه العمليات الحسابية مع زمن انتقال منخفض باستخدام Databricks Online Tables وخدمة ميزة Databricks. للحصول على المجموعة الكاملة من التعليمات البرمجية للمثال، راجع مثال دفتر الملاحظات.
الخطوة 1. إنشاء الجدول المصدر
يحتوي الجدول المصدر على قيم ميزات تم حسابها مسبقا ويمكن أن يكون أي جدول Delta في كتالوج Unity باستخدام مفتاح أساسي. في هذا المثال، يحتوي الجدول على قائمة بالمدن مع خطوط الطول والعرض الخاصة بها. المفتاح الأساسي هو destination_id. تظهر بيانات العينة أدناه.
| الاسم | destination_id (pk) | خط العرض | خط الطول |
|---|---|---|---|
| ناشفيل، تينيسي | 0 | 36.162663 | -86.7816 |
| هونولولو، هاواي | 1 | 21.309885 | -157.85814 |
| لاس فيغاس، نيفادا | 2 | 36.171562 | -115.1391 |
| نيويورك، نيويورك | 3 | 40.712776 | -74.005974 |
الخطوة 2. إنشاء جدول عبر الإنترنت
الجدول عبر الإنترنت هو نسخة للقراءة فقط من جدول دلتا الذي تم تحسينه للوصول عبر الإنترنت. لمزيد من المعلومات، راجع استخدام الجداول عبر الإنترنت لخدمة الميزات في الوقت الحقيقي.
لإنشاء جدول عبر الإنترنت، يمكنك استخدام واجهة المستخدم إنشاء جدول عبر الإنترنت باستخدام واجهة المستخدم أو واجهة برمجة تطبيقات REST أو Databricks SDK، كما في المثال التالي:
from pprint import pprint
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.catalog import *
import mlflow
workspace = WorkspaceClient()
# Create an online table
feature_table_name = f"main.on_demand_demo.location_features"
online_table_name=f"main.on_demand_demo.location_features_online"
spec = OnlineTableSpec(
primary_key_columns=["destination_id"],
source_table_full_name = feature_table_name,
run_triggered=OnlineTableSpecTriggeredSchedulingPolicy.from_dict({'triggered': 'true'}),
perform_full_copy=True)
# ignore "already exists" error
try:
online_table_pipeline = workspace.online_tables.create(name=online_table_name, spec=spec)
except Exception as e:
if "already exists" in str(e):
pass
else:
raise e
pprint(workspace.online_tables.get(online_table_name))
الخطوة 3. إنشاء دالة في كتالوج Unity
في هذا المثال، تحسب الدالة المسافة بين الوجهة (التي لا يتغير موقعها) والمستخدم (الذي يتغير موقعه بشكل متكرر ولا يعرف حتى وقت الاستدلال).
# Define the function. This function calculates the distance between two locations.
function_name = f"main.on_demand_demo.distance"
spark.sql(f"""
CREATE OR REPLACE FUNCTION {function_name}(latitude DOUBLE, longitude DOUBLE, user_latitude DOUBLE, user_longitude DOUBLE)
RETURNS DOUBLE
LANGUAGE PYTHON AS
$$
import math
lat1 = math.radians(latitude)
lon1 = math.radians(longitude)
lat2 = math.radians(user_latitude)
lon2 = math.radians(user_longitude)
# Earth's radius in kilometers
radius = 6371
# Haversine formula
dlat = lat2 - lat1
dlon = lon2 - lon1
a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
distance = radius * c
return distance
$$""")
الخطوة 4. إنشاء مواصفات ميزة في كتالوج Unity
تحدد مواصفات الميزة الميزات التي تخدمها نقطة النهاية ومفاتيح البحث الخاصة بها. كما أنه يحدد أي وظائف مطلوبة لتطبيقها على الميزات المستردة مع روابطها. للحصول على التفاصيل، راجع إنشاء FeatureSpec.
from databricks.feature_engineering import FeatureLookup, FeatureFunction, FeatureEngineeringClient
fe = FeatureEngineeringClient()
features=[
FeatureLookup(
table_name=feature_table_name,
lookup_key="destination_id"
),
FeatureFunction(
udf_name=function_name,
output_name="distance",
input_bindings={
"latitude": "latitude",
"longitude": "longitude",
"user_latitude": "user_latitude",
"user_longitude": "user_longitude"
},
),
]
feature_spec_name = f"main.on_demand_demo.travel_spec"
# The following code ignores errors raised if a feature_spec with the specified name already exists.
try:
fe.create_feature_spec(name=feature_spec_name, features=features, exclude_columns=None)
except Exception as e:
if "already exists" in str(e):
pass
else:
raise e
الخطوة 5. إنشاء نقطة نهاية خدمة ميزة
لإنشاء نقطة نهاية خدمة ميزة، يمكنك استخدام واجهة المستخدم إنشاء نقطة نهاية أو واجهة برمجة تطبيقات REST أو Databricks SDK الموضحة هنا.
تأخذ نقطة نهاية خدمة الميزة feature_spec التي قمت بإنشائها في الخطوة 4 كمعلمة.
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.serving import EndpointCoreConfigInput, ServedEntityInput
# Create endpoint
endpoint_name = "fse-location"
try:
status = workspace.serving_endpoints.create_and_wait(
name=endpoint_name,
config = EndpointCoreConfigInput(
served_entities=[
ServedEntityInput(
entity_name=feature_spec_name,
scale_to_zero_enabled=True,
workload_size="Small"
)
]
)
)
print(status)
# Get the status of the endpoint
status = workspace.serving_endpoints.get(name=endpoint_name)
print(status)
الخطوة 6. الاستعلام عن نقطة نهاية خدمة الميزة
عند الاستعلام عن نقطة النهاية، فإنك توفر المفتاح الأساسي وأي بيانات سياق تستخدمها الدالة اختياريا. في هذا المثال، تأخذ الدالة كمدخل للموقع الحالي للمستخدم (خط العرض وخط الطول). نظرا لأن موقع المستخدم يتغير باستمرار، يجب توفيره إلى الدالة في وقت الاستدلال كميزة سياق.
يمكنك أيضا الاستعلام عن نقطة النهاية باستخدام واجهة المستخدم الاستعلام عن نقطة نهاية باستخدام واجهة المستخدم أو واجهة برمجة تطبيقات REST.
للتبسيط، يحسب هذا المثال المسافة إلى مدينتين فقط. قد يحسب سيناريو أكثر واقعية مسافة المستخدم من كل موقع في جدول الميزات لتحديد المدن التي يجب التوصية بها.
import mlflow.deployments
client = mlflow.deployments.get_deploy_client("databricks")
response = client.predict(
endpoint=endpoint_name,
inputs={
"dataframe_records": [
{"destination_id": 1, "user_latitude": 37, "user_longitude": -122},
{"destination_id": 2, "user_latitude": 37, "user_longitude": -122},
]
},
)
pprint(response)
مثال لدفتر الملاحظات
راجع دفتر الملاحظات هذا للحصول على توضيح كامل للخطوات:
مثال لدفتر الملاحظات الخاص بخدمة الميزة مع جداول عبر الإنترنت
معلومات إضافية
للحصول على تفاصيل حول استخدام واجهة برمجة تطبيقات Python لهندسة الميزات، راجع الوثائق المرجعية.