Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/logicalclocks/feature-store-api
Python - Java/Scala API for the Hopsworks feature store
https://github.com/logicalclocks/feature-store-api
feature-store hopsworks hsfs python scala spark
Last synced: 6 days ago
JSON representation
Python - Java/Scala API for the Hopsworks feature store
- Host: GitHub
- URL: https://github.com/logicalclocks/feature-store-api
- Owner: logicalclocks
- License: apache-2.0
- Created: 2020-01-07T09:10:14.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-04-12T12:38:57.000Z (9 months ago)
- Last Synced: 2024-04-12T16:36:29.250Z (9 months ago)
- Topics: feature-store, hopsworks, hsfs, python, scala, spark
- Language: Python
- Homepage:
- Size: 125 MB
- Stars: 51
- Watchers: 12
- Forks: 43
- Open Issues: 49
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Hopsworks Feature Store
HSFS is the library to interact with the Hopsworks Feature Store. The library makes creating new features, feature groups and training datasets easy.
The library is environment independent and can be used in two modes:
- Spark mode: For data engineering jobs that create and write features into the feature store or generate training datasets. It requires a Spark environment such as the one provided in the Hopsworks platform or Databricks. In Spark mode, HSFS provides bindings both for Python and JVM languages.
- Python mode: For data science jobs to explore the features available in the feature store, generate training datasets and feed them in a training pipeline. Python mode requires just a Python interpreter and can be used both in Hopsworks from Python Jobs/Jupyter Kernels, Amazon SageMaker or KubeFlow.
The library automatically configures itself based on the environment it is run.
However, to connect from an external environment such as Databricks or AWS Sagemaker,
additional connection information, such as host and port, is required. For more information checkout the [Hopsworks documentation](https://docs.hopsworks.ai/latest/).## Getting Started On Hopsworks
Get started easily by registering an account on [Hopsworks Serverless](https://app.hopsworks.ai/). Create your project and a [new Api key](https://docs.hopsworks.ai/latest/user_guides/projects/api_key/create_api_key/). In a new python environment with Python 3.8 or higher, install the [client library](https://docs.hopsworks.ai/latest/user_guides/client_installation/) using pip:
```bash
# Get all Hopsworks SDKs: Feature Store, Model Serving and Platform SDK
pip install hopsworks
# or minimum install with the Feature Store SDK
pip install hsfs[python]
# if using zsh don't forget the quotes
pip install 'hsfs[python]'
```You can start a notebook and instantiate a connection and get the project feature store handler.
```python
import hopsworksproject = hopsworks.login() # you will be prompted for your api key
fs = project.get_feature_store()
```or using `hsfs` directly:
```python
import hsfsconnection = hsfs.connection(
host="c.app.hopsworks.ai", #
project="your-project",
api_key_value="your-api-key",
)
fs = connection.get_feature_store()
```Create a new feature group to start inserting feature values.
```python
fg = fs.create_feature_group("rain",
version=1,
description="Rain features",
primary_key=['date', 'location_id'],
online_enabled=True)fg.save(dataframe)
```Upsert new data in to the feature group with `time_travel_format="HUDI"`".
```python
fg.insert(upsert_df)
```Retrieve commit timeline metdata of the feature group with `time_travel_format="HUDI"`".
```python
fg.commit_details()
```"Reading feature group as of specific point in time".
```python
fg = fs.get_feature_group("rain", 1)
fg.read("2020-10-20 07:34:11").show()
```Read updates that occurred between specified points in time.
```python
fg = fs.get_feature_group("rain", 1)
fg.read_changes("2020-10-20 07:31:38", "2020-10-20 07:34:11").show()
```Join features together
```python
feature_join = rain_fg.select_all()
.join(temperature_fg.select_all(), on=["date", "location_id"])
.join(location_fg.select_all())
feature_join.show(5)
```join feature groups that correspond to specific point in time
```python
feature_join = rain_fg.select_all()
.join(temperature_fg.select_all(), on=["date", "location_id"])
.join(location_fg.select_all())
.as_of("2020-10-31")
feature_join.show(5)
```join feature groups that correspond to different time
```python
rain_fg_q = rain_fg.select_all().as_of("2020-10-20 07:41:43")
temperature_fg_q = temperature_fg.select_all().as_of("2020-10-20 07:32:33")
location_fg_q = location_fg.select_all().as_of("2020-10-20 07:33:08")
joined_features_q = rain_fg_q.join(temperature_fg_q).join(location_fg_q)
```Use the query object to create a training dataset:
```python
td = fs.create_training_dataset("rain_dataset",
version=1,
data_format="tfrecords",
description="A test training dataset saved in TfRecords format",
splits={'train': 0.7, 'test': 0.2, 'validate': 0.1})td.save(feature_join)
```A short introduction to the Scala API:
```scala
import com.logicalclocks.hsfs._
val connection = HopsworksConnection.builder().build()
val fs = connection.getFeatureStore();
val attendances_features_fg = fs.getFeatureGroup("games_features", 1);
attendances_features_fg.show(1)
```You can find more examples on how to use the library in our [hops-examples](https://github.com/logicalclocks/hops-examples) repository.
## Usage
Usage data is collected for improving quality of the library. It is turned on by default if the backend
is "c.app.hopsworks.ai". To turn it off, use one of the following way:
```python
# use environment variable
import os
os.environ["ENABLE_HOPSWORKS_USAGE"] = "false"# use `disable_usage_logging`
import hsfs
hsfs.disable_usage_logging()
```The source code can be found in python/hsfs/usage.py.
## Documentation
Documentation is available at [Hopsworks Feature Store Documentation](https://docs.hopsworks.ai/).
## Issues
For general questions about the usage of Hopsworks and the Feature Store please open a topic on [Hopsworks Community](https://community.hopsworks.ai/).
Please report any issue using [Github issue tracking](https://github.com/logicalclocks/feature-store-api/issues).
Please attach the client environment from the output below in the issue:
```python
import hopsworks
import hsfs
hopsworks.login().get_feature_store()
print(hsfs.get_env())
```## Contributing
If you would like to contribute to this library, please see the [Contribution Guidelines](CONTRIBUTING.md).