⚠️ Contrib Plugin:
The Ray offline store is a contributed plugin. It may not be as stable or fully supported as core offline stores. Use with caution in production and report issues to the Feast community.
GitBook Assistant
The Ray offline store is a data I/O implementation that leverages Ray for reading and writing data from various sources. It focuses on efficient data access operations, while complex feature computation is handled by the Ray Compute Engine.
GitBook Assistant
Quick Start with Ray Template
The easiest way to get started with Ray offline store is to use the built-in Ray template:
Pre-configured Ray offline store and compute engine setup
GitBook Assistant
Sample feature definitions optimized for Ray processing
GitBook Assistant
Demo workflow showcasing Ray capabilities
GitBook Assistant
Resource settings for local development
GitBook Assistant
The template provides a complete working example with sample datasets and demonstrates both Ray offline store data I/O operations and Ray compute engine distributed processing.
GitBook Assistant
Overview
The Ray offline store provides:
GitBook Assistant
Ray-based data reading from file sources (Parquet, CSV, etc.)
GitBook Assistant
Support for local, remote, and KubeRay (Kubernetes-managed) clusters
GitBook Assistant
Integration with various storage backends (local files, S3, GCS, HDFS, Azure Blob)
GitBook Assistant
Efficient data filtering and column selection
GitBook Assistant
Timestamp-based data processing with timezone awareness
GitBook Assistant
Enterprise-ready KubeRay cluster support via CodeFlare SDK
GitBook Assistant
GPU support: schedule worker tasks on GPU nodes via num_gpus config (all modes including KubeRay)
GitBook Assistant
Functionality Matrix
Method
Supported
get_historical_features
GitBook Assistant
Yes
GitBook Assistant
pull_latest_from_table_or_query
GitBook Assistant
Yes
GitBook Assistant
pull_all_from_table_or_query
GitBook Assistant
Yes
GitBook Assistant
offline_write_batch
GitBook Assistant
Yes
GitBook Assistant
write_logged_features
GitBook Assistant
Yes
GitBook Assistant
RetrievalJob Feature
Supported
export to dataframe
GitBook Assistant
Yes
GitBook Assistant
export to arrow table
GitBook Assistant
Yes
GitBook Assistant
persist results in offline store
GitBook Assistant
Yes
GitBook Assistant
local execution of ODFVs
GitBook Assistant
Yes
GitBook Assistant
preview query plan
GitBook Assistant
Yes
GitBook Assistant
read partitioned data
GitBook Assistant
Yes
GitBook Assistant
⚠️ Important: Resource Management
By default, Ray will use all available system resources (CPU and memory). This can cause issues in test environments or when experimenting locally, potentially leading to system crashes or unresponsiveness.
GitBook Assistant
For testing and local experimentation, we strongly recommend:
Batch format for map_batches when num_gpus is set ("numpy" or "pyarrow" for GPU-native libs).
GitBook Assistant
worker_task_options
GitBook Assistant
dict
GitBook Assistant
None
GitBook Assistant
Arbitrary Ray .options() kwargs (num_cpus, memory, accelerator_type, resources, runtime_env, …). See Worker Resource Scheduling for the full reference.
GitBook Assistant
Mode Detection Precedence
The Ray offline store automatically detects the execution mode using the following precedence:
GitBook Assistant
Environment Variables (highest priority)
GitBook Assistant
FEAST_RAY_USE_KUBERAY, FEAST_RAY_CLUSTER_NAME, etc.
By default, Ray will use all available system resources (CPU and memory). This can cause issues in test environments or when experimenting locally, potentially leading to system crashes or unresponsiveness.
GitBook Assistant
Resource Configuration
For custom resource control, configure limits in your feature_store.yaml:
GitBook Assistant
Conservative Settings (Local Development/Testing)
Production Settings
Resource Configuration Options
Setting
Default
Description
Testing Recommendation
broadcast_join_threshold_mb
GitBook Assistant
100
GitBook Assistant
Size threshold for broadcast joins (MB)
GitBook Assistant
25
GitBook Assistant
max_parallelism_multiplier
GitBook Assistant
2
GitBook Assistant
Parallelism as multiple of CPU cores
GitBook Assistant
1
GitBook Assistant
target_partition_size_mb
GitBook Assistant
64
GitBook Assistant
Target partition size (MB)
GitBook Assistant
16
GitBook Assistant
enable_ray_logging
GitBook Assistant
false
GitBook Assistant
Enable Ray progress bars and logging
GitBook Assistant
false
GitBook Assistant
Environment-Specific Recommendations
Local Development
Production Clusters
Usage Examples
Basic Data Source Reading
Direct Data Access
The Ray offline store provides direct access to underlying data:
GitBook Assistant
Batch Writing
The Ray offline store supports batch writing for materialization:
GitBook Assistant
Saved Dataset Persistence
The Ray offline store supports persisting datasets for later analysis:
GitBook Assistant
Remote Storage Support
The Ray offline store supports various remote storage backends:
GitBook Assistant
Using Ray Cluster
Standard Ray Cluster
To use Ray in cluster mode for distributed data access:
GitBook Assistant
Start a Ray cluster:
GitBook Assistant
Configure your feature_store.yaml:
GitBook Assistant
For multiple worker nodes:
GitBook Assistant
KubeRay Cluster (Kubernetes)
To use Feast with Ray clusters on Kubernetes via CodeFlare SDK:
The CodeFlare SDK handles cluster connection and authentication
GitBook Assistant
Automatic TLS certificate management
GitBook Assistant
Authentication with Kubernetes clusters
GitBook Assistant
Namespace isolation
GitBook Assistant
Secure communication between client and Ray cluster
GitBook Assistant
Automatic cluster discovery
GitBook Assistant
GPU Support
The Ray offline store supports GPU scheduling via the num_gpus and gpu_batch_format config options. This works across all execution modes (local, remote, and KubeRay).
The Ray offline store validates data sources to ensure compatibility:
GitBook Assistant
Data Sources
RaySource is the recommended data source for the Ray offline store. It is a pure-metadata descriptor that tells Feast how to load a Ray Dataset from any source Ray Data supports — Parquet, CSV, JSON, HuggingFace datasets, MongoDB, binary files, images, TFRecords, WebDataset, SQL, and more.
GitBook Assistant
See the RaySource reference for a full list of reader_type values and configuration options.
GitBook Assistant
Note: FileSource (Parquet) remains supported for backward compatibility but RaySource(reader_type="parquet") is preferred for new projects.
GitBook Assistant
Limitations
The Ray offline store has one known limitation:
GitBook Assistant
online_write_batch not implemented: The OfflineStore.online_write_batch() interface is not supported by the Ray offline store. This does not affect materialization — feast materialize writes to the online store correctly via the Ray Compute Engine. The restriction only applies to callers that invoke online_write_batch on the offline store object directly, which is an uncommon pattern outside of custom tooling.
GitBook Assistant
Integration with Ray Compute Engine
For complex feature processing operations, use the Ray offline store in combination with the Ray Compute Engine. See the Ray Offline Store + Compute Engine configuration example in the Configuration section above for a complete setup.
from feast import FeatureStore, FeatureView, FileSource
from feast.types import Float32, Int64
from datetime import timedelta
# Define a feature view
driver_stats = FeatureView(
name="driver_stats",
entities=["driver_id"],
ttl=timedelta(days=1),
source=FileSource(
path="data/driver_stats.parquet",
timestamp_field="event_timestamp",
),
schema=[
("driver_id", Int64),
("avg_daily_trips", Float32),
],
)
# Initialize feature store
store = FeatureStore("feature_store.yaml")
# The Ray offline store handles data I/O operations
# For complex feature computation, use Ray Compute Engine
GitBook AssistantAskCopy
from feast.infra.offline_stores.contrib.ray_offline_store.ray import RayOfflineStore
from datetime import datetime, timedelta
# Pull latest data from a table
job = RayOfflineStore.pull_latest_from_table_or_query(
config=store.config,
data_source=driver_stats.source,
join_key_columns=["driver_id"],
feature_name_columns=["avg_daily_trips"],
timestamp_field="event_timestamp",
created_timestamp_column=None,
start_date=datetime.now() - timedelta(days=7),
end_date=datetime.now(),
)
# Convert to pandas DataFrame
df = job.to_df()
print(f"Retrieved {len(df)} rows")
# Convert to Arrow Table
arrow_table = job.to_arrow()
# Get Ray dataset directly
ray_dataset = job.to_ray_dataset()
GitBook AssistantAskCopy
import pyarrow as pa
from feast import FeatureView
# Create sample data
data = pa.table({
"driver_id": [1, 2, 3, 4, 5],
"avg_daily_trips": [10.5, 15.2, 8.7, 12.3, 9.8],
"event_timestamp": [datetime.now()] * 5
})
# Write batch data
RayOfflineStore.offline_write_batch(
config=store.config,
feature_view=driver_stats,
table=data,
progress=lambda x: print(f"Wrote {x} rows")
)
GitBook AssistantAskCopy
from feast.infra.offline_stores.file_source import SavedDatasetFileStorage
# Create storage destination
storage = SavedDatasetFileStorage(path="data/training_dataset.parquet")
# Persist the dataset
job.persist(storage, allow_overwrite=False)
# Create a saved dataset in the registry
saved_dataset = store.create_saved_dataset(
from_=job,
name="driver_training_dataset",
storage=storage,
tags={"purpose": "data_access", "version": "v1"}
)
print(f"Saved dataset created: {saved_dataset.name}")
GitBook AssistantAskCopy
# S3 storage
s3_storage = SavedDatasetFileStorage(path="s3://my-bucket/datasets/driver_features.parquet")
job.persist(s3_storage, allow_overwrite=True)
# Google Cloud Storage
gcs_storage = SavedDatasetFileStorage(path="gs://my-project-bucket/datasets/driver_features.parquet")
job.persist(gcs_storage, allow_overwrite=True)
# HDFS
hdfs_storage = SavedDatasetFileStorage(path="hdfs://namenode:8020/datasets/driver_features.parquet")
job.persist(hdfs_storage, allow_overwrite=True)
# Azure Blob Storage / Azure Data Lake Storage Gen2
# By setting AZURE_STORAGE_ANON=False it uses DefaultAzureCredential
az_storage = SavedDatasetFileStorage(path="abfss://container@stc_account.dfs.core.windows.net/datasets/driver_features.parquet")
job.persist(az_storage, allow_overwrite=True)
GitBook AssistantAskCopy
ray start --head --port=10001
GitBook AssistantAskCopy
offline_store:
type: ray
ray_address: localhost:10001
storage_path: s3://my-bucket/features
GitBook AssistantAskCopy
# On worker nodes
ray start --address='head-node-ip:10001'
export FEAST_RAY_USE_KUBERAY=true
export FEAST_RAY_CLUSTER_NAME=feast-ray-cluster
export FEAST_RAY_AUTH_TOKEN=your-k8s-token
export FEAST_RAY_AUTH_SERVER=https://api.openshift.com:6443
export FEAST_RAY_NAMESPACE=feast-system
export FEAST_RAY_SKIP_TLS=false
# Then use standard Feast code
python your_feast_script.py
GitBook AssistantAskCopy
from feast.infra.offline_stores.contrib.ray_offline_store.ray import RayOfflineStore
# Validate a data source
try:
RayOfflineStore.validate_data_source(store.config, driver_stats.source)
print("Data source is valid")
except Exception as e:
print(f"Data source validation failed: {e}")
GitBook AssistantAskCopy
from feast.infra.offline_stores.contrib.ray_offline_store.ray_source import RaySource
# Load directly from the HuggingFace Hub
cheque_source = RaySource(
name="cheque_images_hf",
reader_type="huggingface",
reader_options={
"dataset_name": "cheques_sample_data",
"split": "train",
},
timestamp_field="event_timestamp",
)
GitBook AssistantAskCopy
offline_store:
type: ray
storage_path: ./data/ray_storage
# Conservative settings for local development
broadcast_join_threshold_mb: 25
max_parallelism_multiplier: 1
target_partition_size_mb: 16
enable_ray_logging: false