databricks-feature-engineering 0.8.0__tar.gz → 0.12.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/PKG-INFO +6 -5
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/client.py +44 -2
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/mlflow_model.py +2 -4
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_catalog_client/_catalog_client.py +7 -2
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_publish_client/_publish_client.py +4 -1
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_spark_client/_spark_client.py +4 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_training_scoring_client/_training_scoring_client.py +62 -33
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/api/proto/feature_catalog_pb2.py +158 -175
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/constants.py +1 -1
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/data_type.py +30 -28
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/feature_lookup.py +27 -2
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/training_set.py +33 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/feature_lookup_utils.py +5 -16
- databricks_feature_engineering-0.12.1/databricks/ml_features/utils/input_example_utils.py +17 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/rest_utils.py +11 -2
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/signature_utils.py +2 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/training_scoring_utils.py +0 -12
- databricks_feature_engineering-0.12.1/databricks/ml_features/utils/version_compatibility_utils.py +26 -0
- databricks_feature_engineering-0.12.1/databricks/ml_features/version.py +1 -0
- databricks_feature_engineering-0.12.1/databricks/ml_features_common/entities/data_type.py +29 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/feature_column_info.py +9 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/feature_spec.py +4 -4
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/online_feature_table.py +4 -3
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/mlflow_model_constants.py +4 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/protos/feature_spec_pb2.py +14 -14
- databricks_feature_engineering-0.12.1/databricks/ml_features_common/utils/data_type_utils.py +69 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/utils/feature_spec_utils.py +12 -5
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/utils/topological_sort.py +41 -8
- databricks_feature_engineering-0.12.1/databricks/ml_features_common/utils/yaml_utils.py +47 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks_feature_engineering.egg-info/PKG-INFO +6 -5
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks_feature_engineering.egg-info/SOURCES.txt +5 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks_feature_engineering.egg-info/requires.txt +3 -3
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/requirements.txt +5 -3
- databricks_feature_engineering-0.8.0/databricks/ml_features/version.py +0 -1
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/LICENSE.md +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/NOTICE.md +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/README.md +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/_feature_store_pkg_metadata/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/_feature_store_pkg_metadata/_core_client_pkg_metadata/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/aggregation.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/aggregation_function.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/cron_schedule.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/feature_aggregations.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/feature_function.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/feature_lookup.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/feature_serving_endpoint.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/feature_spec_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/feature_table.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/entities/materialized_view_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/online_store_spec/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/training_set.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/upgrade_client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/utils/upgrade_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_engineering/version.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/decorators.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/entities/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/entities/feature.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/entities/feature_function.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/entities/feature_lookup.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/entities/feature_serving_endpoint.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/entities/feature_spec.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/entities/feature_spec_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/entities/feature_table.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/online_store_spec/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/publish_engine/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/training_set.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/feature_store/version.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_catalog_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_catalog_client/_catalog_client_helper.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_compute_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_compute_client/_compute_client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_databricks_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_databricks_client/_databricks_client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_feature_serving_endpoint_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_feature_serving_endpoint_client/_feature_serving_endpoint_client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_information_schema_spark_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_information_schema_spark_client/_information_schema_spark_client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_materialization_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_materialization_client/_materialization_client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_online_store_publish_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_online_store_publish_client/_online_store_publish_client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_online_store_publish_client/_online_store_publish_client_factory.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_online_store_publish_client/_online_store_publish_nosql_client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_online_store_publish_client/_online_store_publish_rdbms_client.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_publish_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_spark_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_spark_client/_spark_client_helper.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/_training_scoring_client/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/api/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/api/proto/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/_permission_level.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/aggregation.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/aggregation_function.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/consumer.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/cron_schedule.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/feature.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/feature_aggregations.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/feature_function.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/feature_serving_endpoint.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/feature_spec.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/feature_spec_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/feature_table.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/job.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/key_spec.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/materialized_view_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/notebook.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/online_store_detailed.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/online_store_metadata.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/entities/tag.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/environment_variables.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/flags.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/local_models/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/local_models/databricks_identity_model.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/online_store_spec/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/online_store_spec/amazon_dynamodb_online_store_spec.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/online_store_spec/amazon_rds_mysql_online_store_spec.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/online_store_spec/azure_cosmosdb_online_store_spec.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/online_store_spec/azure_mysql_online_store_spec.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/online_store_spec/azure_sql_server_online_store_spec.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/online_store_spec/online_store_properties.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/online_store_spec/online_store_spec.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/publish_engine/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/publish_engine/publish_cosmosdb_engine.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/publish_engine/publish_dynamodb_engine.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/publish_engine/publish_mysql_engine.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/publish_engine/publish_sql_engine.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/publish_engine/publish_sql_server_engine.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/aggregation/aggregation_query.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/aggregation/aggregation_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/aggregation/generate_query.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/cosmosdb_type_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/cosmosdb_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/dynamodb_type_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/e2e_test_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/feature_serving_endpoint_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/feature_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/headers.yaml +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/logging_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/on_demand_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/publish_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/request_context.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/schema_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/spark_listener.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/spark_test_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/spark_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/test_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features/utils/validation_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/_feature_store_object.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/_proto_enum_entity.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/cloud.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/column_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/feature_spec_constants.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/feature_table_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/feature_tables_for_serving.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/function_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/on_demand_column_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/online_store_for_serving.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/query_mode.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/source_data_column_info.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/entities/store_type.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/protos/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/protos/feature_store_serving_pb2.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/utils/__init__.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/utils/converter_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/utils/dynamodb_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/utils/feature_spec_test_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/utils/test_utils_common.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/utils/uc_utils.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks/ml_features_common/utils/utils_common.py +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks_feature_engineering.egg-info/dependency_links.txt +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/databricks_feature_engineering.egg-info/top_level.txt +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/pyproject.toml +0 -0
- {databricks_feature_engineering-0.8.0 → databricks_feature_engineering-0.12.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: databricks-feature-engineering
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.1
|
|
4
4
|
Summary: Databricks Feature Engineering Client
|
|
5
5
|
Author-email: Databricks <feedback@databricks.com>
|
|
6
6
|
License: Databricks Proprietary License
|
|
@@ -10,15 +10,16 @@ Requires-Python: >=3.8.10
|
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE.md
|
|
12
12
|
License-File: NOTICE.md
|
|
13
|
-
Requires-Dist: mlflow-skinny[databricks]<
|
|
13
|
+
Requires-Dist: mlflow-skinny[databricks]<4,>=2.16.0
|
|
14
14
|
Requires-Dist: pyyaml<7,>=6
|
|
15
15
|
Requires-Dist: boto3<2,>=1.16.7
|
|
16
16
|
Requires-Dist: dbl-tempo<1,>=0.1.26
|
|
17
17
|
Requires-Dist: azure-cosmos==4.3.1
|
|
18
|
-
Requires-Dist: numpy<
|
|
19
|
-
Requires-Dist: protobuf<
|
|
18
|
+
Requires-Dist: numpy<3,>=1.19.2
|
|
19
|
+
Requires-Dist: protobuf<6,>=3.12.0
|
|
20
20
|
Requires-Dist: flask<3,>=1.1.2
|
|
21
21
|
Requires-Dist: sqlparse<1,>=0.4.0
|
|
22
|
+
Dynamic: license-file
|
|
22
23
|
|
|
23
24
|
The Databricks Feature Engineering client is used to:
|
|
24
25
|
* Create, read, and write feature tables
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
import os
|
|
2
3
|
from types import ModuleType
|
|
3
4
|
from typing import Any, Dict, List, Optional, Union
|
|
4
5
|
|
|
@@ -58,6 +59,7 @@ from databricks.ml_features.constants import (
|
|
|
58
59
|
_DEFAULT_PUBLISH_STREAM_TRIGGER,
|
|
59
60
|
_DEFAULT_WRITE_STREAM_TRIGGER,
|
|
60
61
|
MERGE,
|
|
62
|
+
MODEL_DATA_PATH_ROOT,
|
|
61
63
|
)
|
|
62
64
|
from databricks.ml_features.entities.feature_serving_endpoint import (
|
|
63
65
|
EndpointCoreConfig,
|
|
@@ -74,6 +76,7 @@ from databricks.ml_features.utils.feature_utils import (
|
|
|
74
76
|
)
|
|
75
77
|
from databricks.ml_features.utils.request_context import RequestContext
|
|
76
78
|
from databricks.ml_features.utils.utils import as_list, enable_if
|
|
79
|
+
from databricks.ml_features_common import mlflow_model_constants
|
|
77
80
|
from databricks.ml_features_common.utils import uc_utils
|
|
78
81
|
|
|
79
82
|
_logger = logging.getLogger(__name__)
|
|
@@ -372,6 +375,7 @@ class FeatureEngineeringClient:
|
|
|
372
375
|
feature_spec: Optional[str] = None,
|
|
373
376
|
label: Union[str, List[str], None],
|
|
374
377
|
exclude_columns: Optional[List[str]] = None,
|
|
378
|
+
use_spark_native_join: bool = False,
|
|
375
379
|
**kwargs,
|
|
376
380
|
) -> TrainingSet:
|
|
377
381
|
"""
|
|
@@ -382,10 +386,11 @@ class FeatureEngineeringClient:
|
|
|
382
386
|
:class:`FeatureLookups <databricks.ml_features.entities.feature_lookup.FeatureLookup>` are
|
|
383
387
|
joined into the :class:`DataFrame <pyspark.sql.DataFrame>`, and
|
|
384
388
|
:class:`FeatureFunctions <databricks.ml_features.entities.feature_function.FeatureFunction>` are
|
|
385
|
-
computed on-demand.
|
|
386
|
-
:param feature_spec:
|
|
389
|
+
computed on-demand. `feature_lookups` cannot be specified if `feature_spec` is provided.
|
|
390
|
+
:param feature_spec: Full name of the FeatureSpec in Unity Catalog. `feature_spec` cannot be specified if `feature_lookups` is provided.
|
|
387
391
|
:param label: Names of column(s) in :class:`DataFrame <pyspark.sql.DataFrame>` that contain training set labels. To create a training set without a label field, i.e. for unsupervised training set, specify label = None.
|
|
388
392
|
:param exclude_columns: Names of the columns to drop from the :class:`TrainingSet <databricks.ml_features.training_set.TrainingSet>` :class:`DataFrame <pyspark.sql.DataFrame>`.
|
|
393
|
+
:param use_spark_native_join: Use spark to optimize table joining performance. The optimization is only applicable when `Photon <https://docs.databricks.com/en/compute/photon.html>` is enabled.
|
|
389
394
|
:return: A :class:`TrainingSet <databricks.ml_features.training_set.TrainingSet>` object.
|
|
390
395
|
"""
|
|
391
396
|
|
|
@@ -411,6 +416,7 @@ class FeatureEngineeringClient:
|
|
|
411
416
|
label=label,
|
|
412
417
|
exclude_columns=exclude_columns,
|
|
413
418
|
client_name=request_context.FEATURE_ENGINEERING_CLIENT,
|
|
419
|
+
use_spark_native_join=use_spark_native_join,
|
|
414
420
|
**kwargs,
|
|
415
421
|
)
|
|
416
422
|
|
|
@@ -432,6 +438,7 @@ class FeatureEngineeringClient:
|
|
|
432
438
|
label=label,
|
|
433
439
|
exclude_columns=exclude_columns,
|
|
434
440
|
client_name=request_context.FEATURE_ENGINEERING_CLIENT,
|
|
441
|
+
use_spark_native_join=use_spark_native_join,
|
|
435
442
|
**kwargs,
|
|
436
443
|
)
|
|
437
444
|
|
|
@@ -602,6 +609,19 @@ class FeatureEngineeringClient:
|
|
|
602
609
|
|
|
603
610
|
.. note::
|
|
604
611
|
- ``signature`` is not recommended and it's preferred to use ``infer_input_example``.
|
|
612
|
+
- ``output_schema``: When logging a model without labels in the training set, you must pass ``output_schema`` to ``log_model`` to suggest the output schema explicitly. For example:
|
|
613
|
+
|
|
614
|
+
.. code-block:: python
|
|
615
|
+
|
|
616
|
+
from mlflow.types import ColSpec, DataType, Schema
|
|
617
|
+
|
|
618
|
+
output_schema = Schema([ColSpec(DataType.???)]) # Refer to mlflow signature types for the right choice of type here
|
|
619
|
+
...
|
|
620
|
+
fe.log_model(
|
|
621
|
+
...
|
|
622
|
+
output_schema=output_schema
|
|
623
|
+
)
|
|
624
|
+
|
|
605
625
|
|
|
606
626
|
:return: `None`
|
|
607
627
|
"""
|
|
@@ -728,6 +748,7 @@ class FeatureEngineeringClient:
|
|
|
728
748
|
result_type: str = "double",
|
|
729
749
|
env_manager: str = LOCAL,
|
|
730
750
|
params: Optional[dict[str, Any]] = None,
|
|
751
|
+
use_spark_native_join: bool = False,
|
|
731
752
|
**kwargs,
|
|
732
753
|
) -> DataFrame:
|
|
733
754
|
"""
|
|
@@ -827,6 +848,7 @@ class FeatureEngineeringClient:
|
|
|
827
848
|
:param env_manager: The environment manager to use in order to create the python environment for model inference.
|
|
828
849
|
See :func:`mlflow.pyfunc.spark_udf` env_manager.
|
|
829
850
|
:param params: Additional parameters to pass to the model for inference.
|
|
851
|
+
:param use_spark_native_join: Use spark to optimize table joining performance. The optimization is only applicable when `Photon <https://docs.databricks.com/en/compute/photon.html>` is enabled.
|
|
830
852
|
:return: A :class:`DataFrame <pyspark.sql.DataFrame>`
|
|
831
853
|
containing:
|
|
832
854
|
|
|
@@ -844,6 +866,7 @@ class FeatureEngineeringClient:
|
|
|
844
866
|
env_manager=env_manager,
|
|
845
867
|
client_name=request_context.FEATURE_ENGINEERING_CLIENT,
|
|
846
868
|
params=params,
|
|
869
|
+
use_spark_native_join=use_spark_native_join,
|
|
847
870
|
**kwargs,
|
|
848
871
|
)
|
|
849
872
|
|
|
@@ -1023,3 +1046,22 @@ class FeatureEngineeringClient:
|
|
|
1023
1046
|
)
|
|
1024
1047
|
|
|
1025
1048
|
return materialized_view_info
|
|
1049
|
+
|
|
1050
|
+
def build_model_env(self, model_uri: str, save_path: str) -> str:
|
|
1051
|
+
"""
|
|
1052
|
+
Prebuild the model Python environment required by the given model and generate an archive file saved to the specified ``save_path``.
|
|
1053
|
+
The resulting environment can then be used in :meth:`FeatureEngineeringClient.score_batch` as the ``prebuilt_env_uri`` parameter.
|
|
1054
|
+
|
|
1055
|
+
:param model_uri: URI of the model used to build the Python environment.
|
|
1056
|
+
:param save_path: Directory path to save the prebuilt model environment archive file.
|
|
1057
|
+
This can be a local directory path, a mounted DBFS path (e.g., '/dbfs/...'),
|
|
1058
|
+
or a mounted UC volume path (e.g., '/Volumes/...').
|
|
1059
|
+
|
|
1060
|
+
:return: The path of the archive file containing the Python environment data.
|
|
1061
|
+
"""
|
|
1062
|
+
artifact_path = os.path.join(mlflow.pyfunc.DATA, MODEL_DATA_PATH_ROOT)
|
|
1063
|
+
model_data_path = os.path.join(model_uri, artifact_path)
|
|
1064
|
+
raw_model_path = os.path.join(
|
|
1065
|
+
model_data_path, mlflow_model_constants.RAW_MODEL_FOLDER
|
|
1066
|
+
)
|
|
1067
|
+
return mlflow.pyfunc.build_model_env(raw_model_path, save_path)
|
|
@@ -7,11 +7,9 @@ from pyspark.sql import DataFrame, SparkSession
|
|
|
7
7
|
|
|
8
8
|
from databricks.feature_engineering.client import FeatureEngineeringClient
|
|
9
9
|
from databricks.ml_features._spark_client._spark_client import SparkClient
|
|
10
|
-
from databricks.ml_features.constants import
|
|
11
|
-
_NO_RESULT_TYPE_PASSED,
|
|
12
|
-
MODEL_DATA_PATH_ROOT,
|
|
13
|
-
)
|
|
10
|
+
from databricks.ml_features.constants import MODEL_DATA_PATH_ROOT
|
|
14
11
|
from databricks.ml_features.utils import request_context
|
|
12
|
+
from databricks.ml_features_common.mlflow_model_constants import _NO_RESULT_TYPE_PASSED
|
|
15
13
|
|
|
16
14
|
|
|
17
15
|
class _FeatureStoreModelWrapper:
|
|
@@ -14,6 +14,7 @@ from databricks.ml_features.api.proto.feature_catalog_pb2 import (
|
|
|
14
14
|
CreateFeatures,
|
|
15
15
|
CreateFeatureSpec,
|
|
16
16
|
CreateFeatureTable,
|
|
17
|
+
DefaultValue,
|
|
17
18
|
DeleteDataSources,
|
|
18
19
|
DeleteFeatureSpec,
|
|
19
20
|
DeleteFeatureTable,
|
|
@@ -77,6 +78,7 @@ from databricks.ml_features_common.entities.online_feature_table import (
|
|
|
77
78
|
OnlineFeatureTable,
|
|
78
79
|
)
|
|
79
80
|
from databricks.ml_features_common.entities.store_type import StoreType
|
|
81
|
+
from databricks.ml_features_common.utils.data_type_utils import serialize_default_value
|
|
80
82
|
from databricks.ml_features_common.utils.uc_utils import reformat_full_table_name
|
|
81
83
|
|
|
82
84
|
_METHOD_TO_INFO = extract_api_info_for_service(
|
|
@@ -629,6 +631,10 @@ class CatalogClient:
|
|
|
629
631
|
if feature.lookback_window is None
|
|
630
632
|
else feature.lookback_window.total_seconds()
|
|
631
633
|
)
|
|
634
|
+
default_values = [
|
|
635
|
+
DefaultValue(feature_name=k, default_value=serialize_default_value(v))
|
|
636
|
+
for k, v in feature.default_values.items()
|
|
637
|
+
]
|
|
632
638
|
return FeatureLookupProto(
|
|
633
639
|
table_name=feature.table_name,
|
|
634
640
|
lookup_keys=self._resolve_string_or_list(feature.lookup_key),
|
|
@@ -638,6 +644,7 @@ class CatalogClient:
|
|
|
638
644
|
feature.timestamp_lookup_key
|
|
639
645
|
),
|
|
640
646
|
lookback_window_seconds=lookback_window_seconds,
|
|
647
|
+
default_values=default_values,
|
|
641
648
|
)
|
|
642
649
|
|
|
643
650
|
@staticmethod
|
|
@@ -705,14 +712,12 @@ class CatalogClient:
|
|
|
705
712
|
features: List[Union[FeatureLookup, FeatureFunction]],
|
|
706
713
|
exclude_columns: List[str],
|
|
707
714
|
input_columns: List[str],
|
|
708
|
-
feature_spec_yaml: Optional[str],
|
|
709
715
|
req_context: RequestContext,
|
|
710
716
|
):
|
|
711
717
|
req_body = GenerateFeatureSpecYaml(
|
|
712
718
|
features=self._convert_features_to_proto(features),
|
|
713
719
|
exclude_columns=self._resolve_string_or_list(exclude_columns),
|
|
714
720
|
input_columns=input_columns,
|
|
715
|
-
feature_spec_yaml=feature_spec_yaml,
|
|
716
721
|
)
|
|
717
722
|
response_proto = self._call_endpoint(
|
|
718
723
|
GenerateFeatureSpecYaml, req_body, req_context
|
|
@@ -249,7 +249,10 @@ class PublishClient:
|
|
|
249
249
|
if filter_condition:
|
|
250
250
|
# force filtering before proceeding with other operations.
|
|
251
251
|
# e.g. computing latest snapshot
|
|
252
|
-
publish_df = publish_df.filter(filter_condition)
|
|
252
|
+
publish_df = publish_df.filter(filter_condition)
|
|
253
|
+
# [ML-49081] caching the filtered dataframe does not work if it is streaming
|
|
254
|
+
if not streaming:
|
|
255
|
+
publish_df = publish_df.cache()
|
|
253
256
|
|
|
254
257
|
# Only publish features that exist in the catalog.
|
|
255
258
|
if len(features_not_in_catalog) > 0:
|
|
@@ -13,6 +13,7 @@ from pyspark.sql.functions import col, count, lit
|
|
|
13
13
|
from pyspark.sql.types import StructType
|
|
14
14
|
from pyspark.sql.utils import AnalysisException
|
|
15
15
|
|
|
16
|
+
from databricks.ml_features.constants import _PREBUILT_ENV_URI
|
|
16
17
|
from databricks.ml_features.utils import utils
|
|
17
18
|
from databricks.ml_features.utils.utils import (
|
|
18
19
|
sanitize_identifier,
|
|
@@ -557,6 +558,7 @@ class SparkClient:
|
|
|
557
558
|
result_type=None,
|
|
558
559
|
env_manager=None,
|
|
559
560
|
params: Optional[dict[str, Any]] = None,
|
|
561
|
+
prebuilt_env_uri: Optional[str] = None,
|
|
560
562
|
):
|
|
561
563
|
kwargs = {}
|
|
562
564
|
if result_type:
|
|
@@ -565,6 +567,8 @@ class SparkClient:
|
|
|
565
567
|
kwargs["env_manager"] = env_manager
|
|
566
568
|
if params:
|
|
567
569
|
kwargs["params"] = params
|
|
570
|
+
if prebuilt_env_uri:
|
|
571
|
+
kwargs[_PREBUILT_ENV_URI] = prebuilt_env_uri
|
|
568
572
|
|
|
569
573
|
return spark_udf(self._spark, model_uri, **kwargs)
|
|
570
574
|
|
|
@@ -8,7 +8,7 @@ from typing import Any, Dict, List, Optional, Set, Union
|
|
|
8
8
|
import mlflow
|
|
9
9
|
import yaml
|
|
10
10
|
from mlflow.models import Model, ModelSignature
|
|
11
|
-
from mlflow.utils.file_utils import TempDir
|
|
11
|
+
from mlflow.utils.file_utils import TempDir
|
|
12
12
|
from pyspark.sql import DataFrame
|
|
13
13
|
from pyspark.sql.functions import struct
|
|
14
14
|
|
|
@@ -25,7 +25,7 @@ from databricks.ml_features._information_schema_spark_client._information_schema
|
|
|
25
25
|
from databricks.ml_features._spark_client._spark_client import SparkClient
|
|
26
26
|
from databricks.ml_features._spark_client._spark_client_helper import SparkClientHelper
|
|
27
27
|
from databricks.ml_features.constants import (
|
|
28
|
-
|
|
28
|
+
_PREBUILT_ENV_URI,
|
|
29
29
|
_USE_SPARK_NATIVE_JOIN,
|
|
30
30
|
_WARN,
|
|
31
31
|
MODEL_DATA_PATH_ROOT,
|
|
@@ -36,6 +36,7 @@ from databricks.ml_features.entities.feature_lookup import FeatureLookup
|
|
|
36
36
|
from databricks.ml_features.entities.feature_table import FeatureTable
|
|
37
37
|
from databricks.ml_features.training_set import TrainingSet
|
|
38
38
|
from databricks.ml_features.utils import (
|
|
39
|
+
input_example_utils,
|
|
39
40
|
request_context,
|
|
40
41
|
training_scoring_utils,
|
|
41
42
|
utils,
|
|
@@ -46,6 +47,10 @@ from databricks.ml_features.utils.signature_utils import (
|
|
|
46
47
|
drop_signature_inputs_and_invalid_params,
|
|
47
48
|
get_mlflow_signature_from_feature_spec,
|
|
48
49
|
)
|
|
50
|
+
from databricks.ml_features.utils.version_compatibility_utils import (
|
|
51
|
+
is_log_model_artifact_path_deprecated,
|
|
52
|
+
mlflow_log_model_starts_run,
|
|
53
|
+
)
|
|
49
54
|
from databricks.ml_features_common import mlflow_model_constants
|
|
50
55
|
from databricks.ml_features_common.entities.column_info import ColumnInfo
|
|
51
56
|
from databricks.ml_features_common.entities.feature_column_info import FeatureColumnInfo
|
|
@@ -53,12 +58,14 @@ from databricks.ml_features_common.entities.feature_spec import FeatureSpec
|
|
|
53
58
|
from databricks.ml_features_common.entities.source_data_column_info import (
|
|
54
59
|
SourceDataColumnInfo,
|
|
55
60
|
)
|
|
61
|
+
from databricks.ml_features_common.mlflow_model_constants import _NO_RESULT_TYPE_PASSED
|
|
56
62
|
from databricks.ml_features_common.utils import uc_utils, utils_common
|
|
57
63
|
from databricks.ml_features_common.utils.feature_spec_utils import (
|
|
58
64
|
assign_topological_ordering,
|
|
59
65
|
convert_to_yaml_string,
|
|
60
66
|
get_encoded_graph_map,
|
|
61
67
|
)
|
|
68
|
+
from databricks.ml_features_common.utils.yaml_utils import read_yaml
|
|
62
69
|
|
|
63
70
|
_logger = logging.getLogger(__name__)
|
|
64
71
|
|
|
@@ -140,6 +147,9 @@ class TrainingScoringClient:
|
|
|
140
147
|
self._catalog_client_helper.add_consumer(
|
|
141
148
|
consumer_feature_table_map, add_consumer_req_context
|
|
142
149
|
)
|
|
150
|
+
# Spark query planning is known to cause spark driver to crash if there are many feature tables to PiT join.
|
|
151
|
+
# See https://docs.google.com/document/d/1EyA4vvlWikTJMeinsLkxmRAVNlXoF1eqoZElOdqlWyY/edit
|
|
152
|
+
# So we disable native join by default.
|
|
143
153
|
training_scoring_utils.warn_if_non_photon_for_native_spark(
|
|
144
154
|
kwargs.get(_USE_SPARK_NATIVE_JOIN, False), self._spark_client
|
|
145
155
|
)
|
|
@@ -150,10 +160,7 @@ class TrainingScoringClient:
|
|
|
150
160
|
ft_metadata.feature_table_metadata_map,
|
|
151
161
|
ft_metadata.feature_table_data_map,
|
|
152
162
|
uc_function_infos,
|
|
153
|
-
kwargs.get(
|
|
154
|
-
_USE_SPARK_NATIVE_JOIN,
|
|
155
|
-
training_scoring_utils.get_default_use_spark_native_join(feature_spec),
|
|
156
|
-
),
|
|
163
|
+
kwargs.get(_USE_SPARK_NATIVE_JOIN, False),
|
|
157
164
|
)
|
|
158
165
|
|
|
159
166
|
def create_training_set_from_feature_lookups(
|
|
@@ -210,29 +217,37 @@ class TrainingScoringClient:
|
|
|
210
217
|
label_names,
|
|
211
218
|
)
|
|
212
219
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
local_feature_spec = training_scoring_utils.build_feature_spec(
|
|
216
|
-
feature_lookups,
|
|
217
|
-
ft_metadata,
|
|
218
|
-
column_infos,
|
|
219
|
-
exclude_columns,
|
|
220
|
-
self._catalog_client.feature_store_workspace_id,
|
|
221
|
-
)
|
|
222
|
-
local_generated_yaml_string = convert_to_yaml_string(local_feature_spec)
|
|
223
|
-
try:
|
|
220
|
+
if client_name == request_context.FEATURE_ENGINEERING_CLIENT:
|
|
221
|
+
# Feature Engineering client moved the FeatureSpec generation logic to the server.
|
|
224
222
|
input_columns = [col for col in df.columns if col not in label_names]
|
|
225
|
-
|
|
223
|
+
feature_spec_yaml = self._catalog_client.generate_feature_spec_yaml(
|
|
226
224
|
features,
|
|
227
225
|
exclude_columns,
|
|
228
226
|
input_columns,
|
|
229
|
-
local_generated_yaml_string,
|
|
230
227
|
req_context,
|
|
231
228
|
)
|
|
232
|
-
feature_spec = FeatureSpec._from_dict(yaml.safe_load(
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
229
|
+
feature_spec = FeatureSpec._from_dict(yaml.safe_load(feature_spec_yaml))
|
|
230
|
+
else:
|
|
231
|
+
if any(
|
|
232
|
+
[
|
|
233
|
+
hasattr(f, "default_values") and f.default_values
|
|
234
|
+
for f in feature_lookups
|
|
235
|
+
]
|
|
236
|
+
):
|
|
237
|
+
_logger.warning(
|
|
238
|
+
"FeatureStore Client does not support default values for FeatureLookups, Any specified default values will be ignored. Please use Feature Engineering Client"
|
|
239
|
+
)
|
|
240
|
+
# clear default values from feature lookups
|
|
241
|
+
for feature_lookup in feature_lookups:
|
|
242
|
+
feature_lookup.default_values = None
|
|
243
|
+
# As server only supports FeatureSpec generation on UC tables. Feature Store client will continue to generate feature spec locally.
|
|
244
|
+
feature_spec = training_scoring_utils.build_feature_spec(
|
|
245
|
+
feature_lookups,
|
|
246
|
+
ft_metadata,
|
|
247
|
+
column_infos,
|
|
248
|
+
exclude_columns,
|
|
249
|
+
self._catalog_client.feature_store_workspace_id,
|
|
250
|
+
)
|
|
236
251
|
|
|
237
252
|
return self.create_training_set(
|
|
238
253
|
feature_spec,
|
|
@@ -388,6 +403,7 @@ class TrainingScoringClient:
|
|
|
388
403
|
result_type=result_type,
|
|
389
404
|
env_manager=env_manager,
|
|
390
405
|
params=params,
|
|
406
|
+
prebuilt_env_uri=kwargs.get(_PREBUILT_ENV_URI, None),
|
|
391
407
|
)
|
|
392
408
|
# TODO (ML-17260) Consider reading the timestamp from the backend instead of feature store artifacts
|
|
393
409
|
ml_model = Model.load(
|
|
@@ -490,10 +506,7 @@ class TrainingScoringClient:
|
|
|
490
506
|
feature_table_metadata_map=feature_table_metadata_map,
|
|
491
507
|
feature_table_data_map=feature_table_data_map,
|
|
492
508
|
uc_function_infos=uc_function_infos,
|
|
493
|
-
use_spark_native_join=kwargs.get(
|
|
494
|
-
_USE_SPARK_NATIVE_JOIN,
|
|
495
|
-
training_scoring_utils.get_default_use_spark_native_join(feature_spec),
|
|
496
|
-
),
|
|
509
|
+
use_spark_native_join=kwargs.get(_USE_SPARK_NATIVE_JOIN, False),
|
|
497
510
|
)._augment_df()
|
|
498
511
|
|
|
499
512
|
# Only included FeatureSpec columns should be part of UDF inputs for scoring.
|
|
@@ -600,7 +613,9 @@ class TrainingScoringClient:
|
|
|
600
613
|
training_set.feature_spec
|
|
601
614
|
)
|
|
602
615
|
label_type_map = training_set._label_data_types
|
|
603
|
-
|
|
616
|
+
|
|
617
|
+
labels = training_set._labels
|
|
618
|
+
df_head = training_set._df.drop(*labels).head()
|
|
604
619
|
else:
|
|
605
620
|
# FeatureSpec.load expects the root directory of feature_spec.yaml
|
|
606
621
|
root_dir, file_name = os.path.split(feature_spec_path)
|
|
@@ -714,8 +729,14 @@ class TrainingScoringClient:
|
|
|
714
729
|
)
|
|
715
730
|
|
|
716
731
|
try:
|
|
717
|
-
if
|
|
718
|
-
|
|
732
|
+
if (
|
|
733
|
+
df_head is not None
|
|
734
|
+
and signature is not None
|
|
735
|
+
and infer_input_example
|
|
736
|
+
):
|
|
737
|
+
input_example = input_example_utils.infer_input_example(
|
|
738
|
+
df_head, signature
|
|
739
|
+
)
|
|
719
740
|
else:
|
|
720
741
|
input_example = None
|
|
721
742
|
except Exception:
|
|
@@ -723,15 +744,23 @@ class TrainingScoringClient:
|
|
|
723
744
|
|
|
724
745
|
feature_spec.save(data_path)
|
|
725
746
|
|
|
726
|
-
|
|
747
|
+
if (
|
|
748
|
+
mlflow.tracking.fluent.active_run() is None
|
|
749
|
+
and not mlflow_log_model_starts_run()
|
|
750
|
+
):
|
|
751
|
+
mlflow.start_run()
|
|
752
|
+
compatible_parameters = {}
|
|
753
|
+
if is_log_model_artifact_path_deprecated():
|
|
754
|
+
compatible_parameters["name"] = artifact_path
|
|
755
|
+
else:
|
|
756
|
+
compatible_parameters["artifact_path"] = artifact_path
|
|
727
757
|
mlflow.pyfunc.log_model(
|
|
728
|
-
artifact_path=artifact_path,
|
|
729
758
|
loader_module=mlflow_model_constants.MLFLOW_MODEL_NAME,
|
|
730
759
|
data_path=data_path,
|
|
731
|
-
code_path=None,
|
|
732
760
|
conda_env=conda_env,
|
|
733
761
|
signature=signature,
|
|
734
762
|
input_example=input_example,
|
|
763
|
+
**compatible_parameters,
|
|
735
764
|
)
|
|
736
765
|
if registered_model_name is not None:
|
|
737
766
|
# The call to mlflow.pyfunc.log_model will create an active run, so it is safe to
|