from feast import FeatureStore
store = FeatureStore(repo_path=".")
import pandas as pd
from datetime import datetime
def run_demo():
store = FeatureStore(repo_path=".")
print("--- Historical features ---")
entity_df = pd.DataFrame.from_dict(
{
"driver_id": [1001, 1002, 1003, 1004],
"event_timestamp": [
datetime(2021, 4, 12, 10, 59, 42),
datetime(2021, 4, 12, 8, 12, 10),
datetime(2021, 4, 12, 16, 40, 26),
datetime(2021, 4, 12, 15, 1, 12),
],
"val_to_add": [1, 2, 3, 4],
"val_to_add_2": [10, 20, 30, 40],
}
)
training_df = store.get_historical_features(
entity_df=entity_df, features=store.get_feature_service("model_v2"),
).to_df()
print(training_df.head())
print("\n--- Online features ---")
features = store.get_online_features(
features=store.get_feature_service("model_v2"),
entity_rows=[{"driver_id": 1001, "val_to_add": 1000, "val_to_add_2": 2000,}],
).to_dict()
for key, value in sorted(features.items()):
print(key, " : ", value)
print("\n--- Simulate a stream event ingestion via the daily stats push source ---")
event_df = pd.DataFrame.from_dict(
{
"driver_id": [1001],
"event_timestamp": [datetime(2021, 5, 13, 10, 59, 42),],
"created": [datetime(2021, 5, 13, 10, 59, 42),],
"daily_miles_driven": [1234],
}
)
print(event_df)
store.push("driver_stats_push_source", event_df)
print("\n--- Online features again with updated values from a stream push---")
features = store.get_online_features(
features=store.get_feature_service("model_v2"),
entity_rows=[{"driver_id": 1001, "val_to_add": 1000, "val_to_add_2": 2000,}],
).to_dict()
for key, value in sorted(features.items()):
print(key, " : ", value)
if __name__ == "__main__":
run_demo()