Інтеграція Databricks для ML та Big Data
Уявіть: ваша команда machine learning-інженерів витрачає тижні на налаштування Spark-кластерів, конфігурацію Hive Metastore та встановлення MLflow вручну. Кожен новий проект вимагає повторного розгортання інфраструктури, а ознаки доводиться перераховувати із сирих даних, втрачаючи час на очищення. Типова економія часу при переході на managed-платформу становить 70% на інфраструктурних задачах. Замовте інтеграцію Databricks — це прискорить ML-пайплайни та скоротить витрати.
Databricks — це керована платформа, яка об'єднує Spark з Unity Catalog, MLflow, Feature Store та AutoML «з коробки». Ми — досвідчені інженери — налаштуємо для вас Databricks так, щоб ви зосередилися на моделях, а не на інфраструктурі.
Проблеми, які вирішуємо
- Роздута інфраструктура. Ванільний Spark вимагає налаштування кластерів, конфігурації метасторів та ручного автогрупування. Databricks пропонує auto-scaling, spot-інстанси та автоматичне завершення простою — економія до 40% витрат на хмару.
- Відсутність єдиного реєстру ознак. Без Feature Store кожен ML-інженер перераховує ознаки повторно, що підвищує latency та ризик помилок. Databricks Feature Store на Delta Lake вирішує це інкрементальними оновленнями.
- Управління моделями. MLflow вбудований і дозволяє відстежувати експерименти, версіонувати моделі та деплоїти їх однією командою.
Як ми це робимо: кейс із практики
На одному проекті з детекції шахрайства наш клієнт замінив «збірну солянку» (Spark + окремий MLflow + Feast) на єдину платформу Databricks. Результат: час розгортання скоротився з 2 тижнів до 2 днів, а latency інференсу впала в 3 рази завдяки in-place scoring через fs.score_batch(). Інвестиції в Databricks окупилися за 4 місяці.
Ключові компоненти Databricks для ML
Delta Lake та Feature Store
from databricks.feature_store import FeatureStoreClient
from databricks.feature_store.entities.feature_lookup import FeatureLookup
import pyspark.sql.functions as F
fs = FeatureStoreClient()
def compute_user_features(df):
return df.groupBy("user_id").agg(
F.count("transaction_id").alias("tx_count_30d"),
F.sum("amount").alias("tx_amount_30d"),
F.avg("amount").alias("tx_avg_amount"),
F.stddev("amount").alias("tx_std_amount"),
F.countDistinct("merchant_category").alias("unique_categories"),
F.max("timestamp").alias("last_transaction_ts")
)
user_features_df = compute_user_features(
spark.table("transactions").filter("date >= current_date() - 30")
)
fs.create_table(
name="ml_catalog.features.user_transaction_features",
primary_keys=["user_id"],
df=user_features_df,
description="User transaction features, 30-day rolling window"
)
fs.write_table(
name="ml_catalog.features.user_transaction_features",
df=user_features_df,
mode="merge"
)
AutoML та MLflow
from databricks import automl
from datetime import datetime
summary = automl.classify(
dataset=spark.table("ml_catalog.training.fraud_labels"),
target_col="is_fraud",
data_dir="dbfs:/automl/fraud_detection",
timeout_minutes=60,
experiment_dir="/Users/mlteam/experiments",
primary_metric="f1"
)
print(f"Best model: {summary.best_trial.model_description}")
print(f"Best F1: {summary.best_trial.evaluation_metric_score:.4f}")
import mlflow
import mlflow.pyfunc
from mlflow.models.signature import infer_signature
mlflow.set_registry_uri("databricks")
mlflow.set_experiment("/ML/fraud_detection")
with mlflow.start_run(run_name=f"gbm_{datetime.now():%Y%m%d_%H%M}") as run:
feature_lookups = [
FeatureLookup(
table_name="ml_catalog.features.user_transaction_features",
feature_names=["tx_count_30d", "tx_amount_30d", "tx_avg_amount"],
lookup_key="user_id"
),
FeatureLookup(
table_name="ml_catalog.features.merchant_features",
feature_names=["merchant_risk_score", "merchant_age_days"],
lookup_key="merchant_id"
)
]
training_set = fs.create_training_set(
df=spark.table("ml_catalog.training.fraud_labels"),
feature_lookups=feature_lookups,
label="is_fraud",
exclude_columns=["timestamp"]
)
training_df = training_set.load_df().toPandas()
from lightgbm import LGBMClassifier
from sklearn.model_selection import cross_val_score
model = LGBMClassifier(n_estimators=300, learning_rate=0.05, random_state=42)
cv_auc = cross_val_score(model, training_df.drop("is_fraud", axis=1),
training_df["is_fraud"], cv=5, scoring="roc_auc")
mlflow.log_params(model.get_params())
mlflow.log_metric("cv_auc_mean", cv_auc.mean())
mlflow.log_metric("cv_auc_std", cv_auc.std())
model.fit(training_df.drop("is_fraud", axis=1), training_df["is_fraud"])
fs.log_model(
model=model,
artifact_path="model",
flavor=mlflow.lightgbm,
training_set=training_set,
registered_model_name="fraud_detection_model"
)
print(f"Run ID: {run.info.run_id}")
Model Serving
import requests
def deploy_model(model_name: str, model_version: int, workspace_url: str, token: str):
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
endpoint_config = {
"name": f"{model_name}_endpoint",
"config": {
"served_entities": [{
"name": "primary",
"entity_name": model_name,
"entity_version": str(model_version),
"workload_size": "Small",
"scale_to_zero_enabled": True
}],
"traffic_config": {
"routes": [{"served_model_name": "primary", "traffic_percentage": 100}]
}
}
}
response = requests.post(
f"{workspace_url}/api/2.0/serving-endpoints",
headers=headers,
json=endpoint_config
)
return response.json()
def batch_inference_job(model_name: str, input_table: str, output_table: str):
predictions = fs.score_batch(
f"models:/{model_name}/Production",
spark.table(input_table)
)
predictions.write.mode("overwrite").saveAsTable(output_table)
Як Databricks вирішує проблему роздутої інфраструктури?
Databricks автоматично керує конфігурацією Spark через spark.databricks.delta.preview.enabled, а вбудований автологгінг MLflow логує параметри та метрики без додаткового коду. Інтеграція з популярними бібліотеками (LightGBM, XGBoost, PyTorch) виконується в один клік. За даними бенчмарків, Databricks швидше self-managed Spark у 2-3 рази на задачах з великими обсягами даних Wikipedia: Apache Spark.
Чому варто обрати Databricks для ML?
Автоматичне керування конфігурацією Spark, вбудований Feature Store з інкрементальними оновленнями та можливість швидко створювати GPU-кластери — ось що робить Databricks привабливим для ML-команд. Конфігурація через Databricks SDK дозволяє розгорнути кластер за хвилини. Інвестиції в Databricks окупаються в середньому за 3-6 місяців завдяки скороченню часу розробки та витрат на інфраструктуру.
from databricks.sdk import WorkspaceClient
from databricks.sdk.service.compute import ClusterSpec, AutoScale
w = WorkspaceClient(
host="https://your-workspace.azuredatabricks.net",
token="dapi..."
)
cluster = w.clusters.create(
cluster_name="ml-training-cluster",
spark_version="14.3.x-ml-gpu-scala2.12",
node_type_id="Standard_NC6s_v3",
autoscale=AutoScale(min_workers=2, max_workers=8),
spark_conf={
"spark.databricks.delta.preview.enabled": "true",
"spark.sql.adaptive.enabled": "true",
},
custom_tags={"team": "ml", "env": "production"},
data_security_mode="SINGLE_USER"
)
Databricks vs Self-managed Spark: що обрати?
| Аспект | Databricks | Self-managed Spark |
|---|---|---|
| Setup time | 30 хвилин | 1-2 тижні |
| Cluster autoscaling | Авто | Ручна конфігурація |
| MLflow | Вбудований | Окреме встановлення |
| Delta Lake | Нативно | Окрема конфігурація |
| Feature Store | Вбудований | Feast / Tecton |
| Вартість | +20-30% до EC2 | Вартість EC2 |
| GPU підтримка | Нативно | NVIDIA plugin |
Оптимальний вибір Databricks: команди > 5 ML-інженерів, > 3 активних проектів, хмарний деплой. ROI: економія 2-4 місяців розробки інфраструктури на старті.
Процес роботи під ключ
- Аналітика: аудит поточної інфраструктури, даних та ML-процесів.
- Проектування: вибір конфігурації кластерів, налаштування Unity Catalog та безпеки.
- Реалізація: розгортання Delta Lake, Feature Store, MLflow Registry, CI/CD для пайплайнів.
- Тестування: навантажувальне тестування інференсу, перевірка latency та accuracy.
- Деплой: налаштування Model Serving з auto-scaling та моніторингом.
- Передача знань: навчання команди, документація та шаблони ноутбуків.
Терміни за етапами:
| Етап | Тривалість |
|---|---|
| Аналітика | 1-2 дні |
| Проектування | 2-3 дні |
| Реалізація | 1-2 тижні |
| Тестування | 3-5 днів |
| Деплой | 2-3 дні |
| Передача знань | 1-2 дні |
Повний цикл від 2 до 6 тижнів залежно від обсягу. Оцінимо ваш проект безкоштовно — зв'яжіться з нами.
Що входить у роботу
- Розгорнута інфраструктура Databricks з налаштованими політиками кластерів та Unity Catalog.
- Інтеграція з існуючим озером даних (S3, ADLS, GCS) через зовнішні таблиці.
- Готові ML-пайплайни з Feature Store, MLflow та AutoML.
- Документація з архітектури та інструкції для команди.
- Підтримка на етапі експлуатації (3 місяці).
Типові помилки при інтеграції
- Робота з сирими даними без Delta Lake — втрати при перезаписі та неможливість time travel.
- Ігнорування Feature Store — кожен проект перераховує ознаки, зростає latency.
- Запуск дорогих кластерів без автозавершення — використовуйте scale-to-zero для економії.
Досвід нашої команди — 10+ років в ML-інфраструктурі. Ми гарантуємо, що після налаштування ваш MLOps буде працювати без збоїв. Якщо хочете прискорити впровадження — напишіть нам: оцінимо задачу за 1 день. Отримайте безкоштовну консультацію по вашому проекту — зв'яжіться з нами. Замовте інтеграцію — ваші ML-пайплайни почнуть працювати швидше вже на наступному тижні.







