René's URL Explorer Experiment


Title: feat: Bring Your Own Spark - SparkApplication by aniketpalu · Pull Request #6550 · feast-dev/feast · GitHub

Open Graph Title: feat: Bring Your Own Spark - SparkApplication by aniketpalu · Pull Request #6550 · feast-dev/feast

X Title: feat: Bring Your Own Spark - SparkApplication by aniketpalu · Pull Request #6550 · feast-dev/feast

Description: What this PR does / why we need it: Core changes Upstream (feature_store.py): Refactored `materialize()` and `materialize_incremental()` to collect all `MaterializationTask`s and pass them to the engine in a single `batch_engine.materialize(registry, tasks)` call. This enables batching engines to process all feature views in one job. Existing engines are unaffected — `ComputeEngine.materialize()` base class loops tasks internally via `_materialize_one()`. Added public `get_provider()` method on `FeatureStore` (wraps existing private `_get_provider()`). New engine (spark_application/): `config.py`: Pydantic config with Spark resource specs, K8s options, validation (`env` entries must have `name`, `staging_location` warning). `compute.py`: Creates a K8s Secret with `feature_store.yaml` + task list, builds SparkApplication CR, polls for completion, retrieves driver logs on failure. `job.py`: Maps all 14 SparkApplication states to `MaterializationJobStatus`, with exponential backoff retry on transient API errors. `main.py`: Driver script that runs inside the pod — loads config from Secret, materializes each feature view via `provider.materialize_single_feature_view()`. Supports concurrent FV processing via ThreadPoolExecutor + FAIR scheduler. `Dockerfile`: Based on `apache/spark:4.0.1`, installs `feast[redis]==0.64.0`, includes Hadoop AWS JARs for S3A support. Design decisions Two config rewrites in driver pod: `batch_engine` → `spark.engine` (prevents recursive CRD creation, uses local SparkSession), `registry` → `remote` when `registry_address` is set (pod can't access server filesystem). Driver calls `provider.materialize_single_feature_view()`, not `store.materialize()` — avoids FeatureViewState transition conflicts (MATERIALIZING→MATERIALIZING is invalid) and duplicate OpenLineage/MLflow emissions. SQLite online store rejected at init — data written inside a pod is lost on termination. Kueue integration via `queue_name` config field → `kueue.x-k8s.io/queue-name` label. Validated on OpenShift AI (ROSA) with Spark Operator v2.5.0, MinIO (S3A), Redis 5 feature views, 4800 rows each, 2 executors: 2.4x speedup with concurrent mode Test plan 12 unit tests: config defaults, SQLite rejection, registry validation, config rewrites, CR structure, state mapping (14 states), cleanup 404 handling, timeout behavior, job naming Existing tests unaffected: 29 feature_view_state + 22 local_feature_store tests pass Integration test on cluster with real Spark Operator" Which issue(s) this PR fixes: Checks I've made sure the tests are passing. My commits are signed off (git commit -s) My PR title follows conventional commits format Testing Strategy Unit tests Integration tests Manual tests Testing is not required for this change Misc

Open Graph Description: What this PR does / why we need it: Core changes Upstream (feature_store.py): Refactored `materialize()` and `materialize_incremental()` to collect all `MaterializationTask`s and pass them to the...

X Description: What this PR does / why we need it: Core changes Upstream (feature_store.py): Refactored `materialize()` and `materialize_incremental()` to collect all `MaterializationTask`s and pass them to the...

Opengraph URL: https://github.com/feast-dev/feast/pull/6550

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:26f8198a-4e7d-b339-a3ea-d254f00c8b94
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idA5EC:1E0399:C81AF2:10EDC7D:6A51676F
html-safe-nonce9ab5c0262c16cca0d93b62e3d63f0172c68a5d224fa44dc0af9b7a382d490d8b
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBNUVDOjFFMDM5OTpDODFBRjI6MTBFREM3RDo2QTUxNjc2RiIsInZpc2l0b3JfaWQiOiI5MTAzMTUyMDQ3MTQyODIzNzkxIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmac2e12ad8974c04226c7458bbce99807ba0ead57b54fa3620217b554386b09937b
hovercard-subject-tagpull_request:3926298248
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/feast-dev/feast/pull/6550/files
twitter:imagehttps://avatars.githubusercontent.com/u/64416568?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/64416568?s=400&v=4
og:image:altWhat this PR does / why we need it: Core changes Upstream (feature_store.py): Refactored `materialize()` and `materialize_incremental()` to collect all `MaterializationTask`s and pass them to the...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
Noneb9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/feast-dev/feast git https://github.com/feast-dev/feast.git
octolytics-dimension-user_id57027613
octolytics-dimension-user_loginfeast-dev
octolytics-dimension-repository_id161133770
octolytics-dimension-repository_nwofeast-dev/feast
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id161133770
octolytics-dimension-repository_network_root_nwofeast-dev/feast
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release60eaaf6d4dbaa817031b556aebd8a0a7eeb81b97
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/feast-dev/feast/pull/6550/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Ffeast-dev%2Ffeast%2Fpull%2F6550%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Ffeast-dev%2Ffeast%2Fpull%2F6550%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=feast-dev%2Ffeast
Reloadhttps://github.com/feast-dev/feast/pull/6550/files
Reloadhttps://github.com/feast-dev/feast/pull/6550/files
Reloadhttps://github.com/feast-dev/feast/pull/6550/files
Please reload this pagehttps://github.com/feast-dev/feast/pull/6550/files
feast-dev https://github.com/feast-dev
feasthttps://github.com/feast-dev/feast
Notifications https://github.com/login?return_to=%2Ffeast-dev%2Ffeast
Fork 1.4k https://github.com/login?return_to=%2Ffeast-dev%2Ffeast
Star 7.1k https://github.com/login?return_to=%2Ffeast-dev%2Ffeast
Code https://github.com/feast-dev/feast
Issues 213 https://github.com/feast-dev/feast/issues
Pull requests 176 https://github.com/feast-dev/feast/pulls
Discussions https://github.com/feast-dev/feast/discussions
Actions https://github.com/feast-dev/feast/actions
Security and quality 1 https://github.com/feast-dev/feast/security
Insights https://github.com/feast-dev/feast/pulse
Code https://github.com/feast-dev/feast
Issues https://github.com/feast-dev/feast/issues
Pull requests https://github.com/feast-dev/feast/pulls
Discussions https://github.com/feast-dev/feast/discussions
Actions https://github.com/feast-dev/feast/actions
Security and quality https://github.com/feast-dev/feast/security
Insights https://github.com/feast-dev/feast/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Ffeast-dev%2Ffeast%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Ffeast-dev%2Ffeast%2Fissues%2Fnew%2Fchoose
aniketpaluhttps://github.com/aniketpalu
feast-dev:masterhttps://github.com/feast-dev/feast/tree/master
aniketpalu:feat/spark-application-compute-enginehttps://github.com/aniketpalu/feast/tree/feat/spark-application-compute-engine
Conversation 7 https://github.com/feast-dev/feast/pull/6550
Commits 6 https://github.com/feast-dev/feast/pull/6550/commits
Checks 22 https://github.com/feast-dev/feast/pull/6550/checks
Files changed https://github.com/feast-dev/feast/pull/6550/files
Please reload this pagehttps://github.com/feast-dev/feast/pull/6550/files
feat: Bring Your Own Spark - SparkApplication https://github.com/feast-dev/feast/pull/6550/files#top
Show all changes 6 commits https://github.com/feast-dev/feast/pull/6550/files
560d5c6 feat: Add SparkApplicationComputeEngine for Kubernetes-native batch m… aniketpalu Jun 24, 2026 https://github.com/feast-dev/feast/pull/6550/commits/560d5c6280085d357c26b685ce99e561a9cec2e5
5804df5 feat: Add per-FV result reporting and clean up Dockerfile aniketpalu Jul 3, 2026 https://github.com/feast-dev/feast/pull/6550/commits/5804df5991999f26c4f1637e0520fd364c55b25d
c8d8397 Minor lint & formatting change aniketpalu Jul 3, 2026 https://github.com/feast-dev/feast/pull/6550/commits/c8d8397647f895424dda877c95cc4369a8efa4e4
6bcc47b Merge branch 'master' into feat/spark-application-compute-engine aniketpalu Jul 3, 2026 https://github.com/feast-dev/feast/pull/6550/commits/6bcc47b357db4367c6da120a13a4acecf0dd4292
83e50a0 Merge branch 'master' into feat/spark-application-compute-engine aniketpalu Jul 8, 2026 https://github.com/feast-dev/feast/pull/6550/commits/83e50a049f104d6d013659c66712cfb9b857a70a
1e3fb36 feat: Switch to ConfigMap, remove registry_address, reject file-based… aniketpalu Jul 9, 2026 https://github.com/feast-dev/feast/pull/6550/commits/1e3fb3649d930523b39d59196faf7b4d41ea9524
Clear filters https://github.com/feast-dev/feast/pull/6550/files
Please reload this pagehttps://github.com/feast-dev/feast/pull/6550/files
Please reload this pagehttps://github.com/feast-dev/feast/pull/6550/files
feature_store.py https://github.com/feast-dev/feast/pull/6550/files#diff-ff4e2a65c8c29b7971edc77a61a7e970d410d77d9f173f72714d1bb49e2509a2
.dockerignore https://github.com/feast-dev/feast/pull/6550/files#diff-ba0d1b7d0df7d4428e085b002c1d3a7de0409e8ced2f8fdf210b5022c0f227a1
Dockerfile https://github.com/feast-dev/feast/pull/6550/files#diff-31a1e237026b37c93fb9c51f63269cae9e7af3402bbd2ff3d8a47f1314d86f4f
__init__.py https://github.com/feast-dev/feast/pull/6550/files#diff-f1d4397ced693049720584ac9ec741bb88c59f66a895d0eccd2d4a541b47e9b7
compute.py https://github.com/feast-dev/feast/pull/6550/files#diff-0c005f921289d42567f1e1bc106868b80dab3c789e4e85d1ed8ea9183e05b954
config.py https://github.com/feast-dev/feast/pull/6550/files#diff-1d0dd4ce59841af8fec2d88b6b76eb99d5d7a3c318b18579e00ac608de8f950b
job.py https://github.com/feast-dev/feast/pull/6550/files#diff-378fbceeac60f27366edd8acff103528e5e06d469cc6afde2c15f3b04e5af7d7
main.py https://github.com/feast-dev/feast/pull/6550/files#diff-2197f21b0a1c945a818f8e913eaa049d11e7ddff2639bb5913896bc766176630
repo_config.py https://github.com/feast-dev/feast/pull/6550/files#diff-c90c6781dcec3cdcc26843e013d3d6e9c1ce89d084b3a67e818fe76a0c7d0436
test_spark_application.py https://github.com/feast-dev/feast/pull/6550/files#diff-ada14a0db0ca01897c2df2df0965af804461c2c2241e7e42c5f257c225236131
https://github.com/feast-dev/feast/blob/master/CODEOWNERS#L10
sdk/python/feast/feature_store.pyhttps://github.com/feast-dev/feast/pull/6550/files#diff-ff4e2a65c8c29b7971edc77a61a7e970d410d77d9f173f72714d1bb49e2509a2
View file https://github.com/feast-dev/feast/blob/1e3fb3649d930523b39d59196faf7b4d41ea9524/sdk/python/feast/feature_store.py
Open in desktop https://desktop.github.com
Please reload this pagehttps://github.com/feast-dev/feast/pull/6550/files
https://github.com/feast-dev/feast/blob/master/CODEOWNERS#L10
sdk/python/feast/infra/compute_engines/spark_application/.dockerignorehttps://github.com/feast-dev/feast/pull/6550/files#diff-ba0d1b7d0df7d4428e085b002c1d3a7de0409e8ced2f8fdf210b5022c0f227a1
View file https://github.com/feast-dev/feast/blob/1e3fb3649d930523b39d59196faf7b4d41ea9524/sdk/python/feast/infra/compute_engines/spark_application/.dockerignore
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/feast-dev/feast/pull/6550/{{ revealButtonHref }}
https://github.com/feast-dev/feast/blob/master/CODEOWNERS#L10
sdk/python/feast/infra/compute_engines/spark_application/Dockerfilehttps://github.com/feast-dev/feast/pull/6550/files#diff-31a1e237026b37c93fb9c51f63269cae9e7af3402bbd2ff3d8a47f1314d86f4f
View file https://github.com/feast-dev/feast/blob/1e3fb3649d930523b39d59196faf7b4d41ea9524/sdk/python/feast/infra/compute_engines/spark_application/Dockerfile
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/feast-dev/feast/pull/6550/{{ revealButtonHref }}
https://github.com/feast-dev/feast/blob/master/CODEOWNERS#L10
sdk/python/feast/infra/compute_engines/spark_application/__init__.pyhttps://github.com/feast-dev/feast/pull/6550/files#diff-f1d4397ced693049720584ac9ec741bb88c59f66a895d0eccd2d4a541b47e9b7
View file https://github.com/feast-dev/feast/blob/1e3fb3649d930523b39d59196faf7b4d41ea9524/sdk/python/feast/infra/compute_engines/spark_application/__init__.py
Open in desktop https://desktop.github.com
Please reload this pagehttps://github.com/feast-dev/feast/pull/6550/files
Please reload this pagehttps://github.com/feast-dev/feast/pull/6550/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.