使用功能表
在本節中:
有關跟蹤特性沿襲和新鮮度的信息,請參見發現特性並跟蹤特性沿襲.
請注意
目前,Databricks特性庫不支持寫入Unity Catalog轉移庫。在支持Unity catalog的工作空間中,你可以將特性表寫入默認的Hive metastore。
數據庫和特性表名稱不能包含連字符(-)。
為特性表創建一個數據庫
在創建任何特性表之前,必須創建一個數據庫儲存它們。
%sql創建數據庫如果不存在<database_name>
特性表存儲為三角洲表.當您使用create_table
(Feature Store客戶端v0.3.6及以上版本)或create_feature_table
(v0.3.5及以下版本),必須指定數據庫名稱。例如,該參數創建一個名為customer_features
在數據庫中recommender_system
.
name = ' recommender_system.customer_features '
當您將特性表發布到在線商店時,默認表和數據庫名稱是您創建表時指定的名稱;方法可以指定不同的名稱publish_table
方法。
Databricks Feature Store UI顯示了在線商店中的表和數據庫的名稱,以及其他元數據。
在Databricks feature Store中創建一個特性表
請注意
您也可以注冊一個現有的差值表作為一個特征表。看到將現有的Delta表注冊為特性表.
創建特征表的基本步驟如下:
編寫Python函數來計算特性。每個函數的輸出都應該是一個具有唯一主鍵的Apache Spark DataFrame。主鍵可以由一個或多個列組成。
創建一個特征表
FeatureStoreClient
和使用create_table
(v0.3.6及以上版本)或create_feature_table
(v0.3.5及以下版本)。使用填充特征表
write_table
.
從databricks.feature_store進口feature_tabledefcompute_customer_features(數據):" '特征計算代碼返回一個以'customer_id'為主鍵的數據幀' "通過#創建customer_id的特征表通過compute_customer_features獲取DataFrame輸出的schema從databricks.feature_store進口FeatureStoreClientcustomer_features_df=compute_customer_features(df)fs=FeatureStoreClient()customer_feature_table=fs.create_table(的名字=“recommender_system.customer_features”,primary_keys=“customer_id”,模式=customer_features_df.模式,描述=“客戶特性”)#另一種方法是使用' create_table '並指定' df '參數。這段代碼自動將特性保存到底層的Delta表中。# customer_feature_table = fs.create_table(#……# df = customer_features_df,#……#)要使用複合鍵,在create_table調用中傳遞所有鍵# customer_feature_table = fs.create_table(#……# primary_keys=['customer_id', 'date'],#……#)#使用write_table向特性表寫入數據# Overwrite模式完全刷新功能表fs.write_table(的名字=“recommender_system.customer_features”,df=customer_features_df,模式=“覆蓋”)
從databricks.feature_store進口feature_tabledefcompute_customer_features(數據):" '特征計算代碼返回一個以'customer_id'為主鍵的數據幀' "通過#創建customer_id的特征表通過compute_customer_features獲取DataFrame輸出的schema從databricks.feature_store進口FeatureStoreClientcustomer_features_df=compute_customer_features(df)fs=FeatureStoreClient()customer_feature_table=fs.create_feature_table(的名字=“recommender_system.customer_features”,鍵=“customer_id”,模式=customer_features_df.模式,描述=“客戶特性”)#另一種方法是使用' create_feature_table '並指定' features_df '參數。這段代碼自動將特性保存到底層的Delta表中。# customer_feature_table = fs.create_feature_table(#……# features_df = customer_features_df,#……#)#使用複合鍵,在create_feature_table調用中傳遞所有鍵# customer_feature_table = fs.create_feature_table(#……# keys=['customer_id', 'date'],#……#)#使用write_table向特性表寫入數據# Overwrite模式完全刷新功能表fs.write_table(的名字=“recommender_system.customer_features”,df=customer_features_df,模式=“覆蓋”)從databricks.feature_store進口feature_tabledefcompute_customer_features(數據):" '特征計算代碼返回一個以'customer_id'為主鍵的數據幀' "通過#創建customer_id的特征表通過compute_customer_features獲取DataFrame輸出的schema從databricks.feature_store進口FeatureStoreClientcustomer_features_df=compute_customer_features(df)fs=FeatureStoreClient()customer_feature_table=fs.create_feature_table(的名字=“recommender_system.customer_features”,鍵=“customer_id”,模式=customer_features_df.模式,描述=“客戶特性”)#另一種方法是使用' create_feature_table '並指定' features_df '參數。這段代碼自動將特性保存到底層的Delta表中。# customer_feature_table = fs.create_feature_table(#……# features_df = customer_features_df,#……#)#使用複合鍵,在create_feature_table調用中傳遞所有鍵# customer_feature_table = fs.create_feature_table(#……# keys=['customer_id', 'date'],#……#)#使用write_table向特性表寫入數據# Overwrite模式完全刷新功能表fs.write_table(的名字=“recommender_system.customer_features”,df=customer_features_df,模式=“覆蓋”)
將現有的Delta表注冊為特性表
使用v0.3.8及以上版本,可以注冊現有的差值表作為一個特征表。Delta表一定存在於轉移瘤中。
請注意
來更新已注冊的特性表,你必須使用特性庫Python API.
fs.register_table(delta_table=“recommender.customer_features”,primary_keys=“customer_id”,描述=“客戶特性”)
更新功能表
您可以通過添加新特性或根據主鍵修改特定行來更新特性表。
以下特性表元數據無法更新:
主鍵
分區鍵
已存在特性的名稱或類型
向現有特性表中添加新特性
你可以通過以下兩種方式向已有的特性表中添加新特性:
更新現有的特征計算函數並運行
write_table
使用返回的DataFrame。這將更新特征表模式,並基於主鍵合並新的特征值。創建一個新的特征計算函數來計算新的特征值。這個新的計算函數返回的DataFrame必須包含特征表的主鍵和分區鍵(如果定義了的話)。運行
write_table
使用相同的主鍵,將新特性寫入現有的特性表。
隻更新特性表中的特定行
使用模式=“合並”
在write_table
.中發送的數據幀中主鍵不存在的行write_table
呼叫保持不變。
fs.write_table(的名字=“recommender.customer_features”,df=customer_features_df,模式=“合並”)
計劃一個作業來更新功能表
為了確保特性表中的特性總是具有最新的值,Databricks建議您創造一份工作它運行一個筆記本,定期更新功能表,比如每天。如果已經創建了非計劃作業,則可以將其轉換為安排的工作確保特征值總是最新的。
更新特性表使用的代碼模式=“合並”
,如下例所示。
fs=FeatureStoreClient()customer_features_df=compute_customer_features(數據)fs.write_table(df=customer_features_df,的名字=“recommender_system.customer_features”,模式=“合並”)
存儲日常特征的過去值
定義一個帶有複合主鍵的特征表。在主鍵中包含日期。例如,對於一個特征表store_purchases
,則可以使用複合主鍵(日期
,user_id
)和分區鍵日期
為了高效的閱讀。
然後可以創建代碼從特征表過濾中讀取日期
到利息的時間段。為了保持特性表的更新,建立一個定期計劃的任務來寫入特性,或者將新的特性值輸入到特性表中。
創建一個流特性計算管道來更新特性
要創建一個流特性計算管道,傳遞一個流DataFrame
作為一個論點write_table
.此方法返回一個StreamingQuery
對象。
defcompute_additional_customer_features(數據):返回流數據幀“‘通過#未顯示customer_transactions=火花.readStream.負載(“dbfs: /事件/ customer_transactions”)stream_df=compute_additional_customer_features(customer_transactions)fs.write_table(df=stream_df,的名字=“recommender_system.customer_features”,模式=“合並”)
從特性表中讀取
使用read_table
讀取特征值。
從特定的時間戳讀取數據
Databricks特性表是差值表,因此您可以檢索任何時間戳的特征值。
進口datetime昨天=datetime.日期.今天()-datetime.timedelta(天=1)#從1天前讀取customer_features值customer_features_df=fs.read_table(的名字=“recommender_system.customer_features”,as_of_delta_timestamp=str(昨天))
搜索和瀏覽功能表
使用功能商店UI搜索或瀏覽功能表。
獲取特性表元數據
獲取特性表元數據的API取決於您正在使用的Databricks運行時版本。對於v0.3.6及以上版本,使用get_table
.對於v0.3.5及以下版本,使用get_feature_table
.
#此示例適用於v0.3.6及以上版本#對於v0.3.5,使用get_feature_table從databricks.feature_store進口FeatureStoreClientfs=FeatureStoreClient()fs.get_table(“feature_store_example.user_feature_table”)
使用特性表標記
標記是可以創建和使用的鍵-值對搜索特征表.您可以使用Feature Store UI或特性庫Python API.
在UI中使用特性表標簽
使用功能商店UI搜索或瀏覽功能表。單擊,進入用戶界麵特色商店在側邊欄中顯示Feature Store UI。此圖標僅在您處於機器學習角色.
使用feature Store Python API處理特性表標記
在運行v0.4.1及以上版本的集群上,您可以使用特性庫Python API.
更新特征表的數據源
特征庫自動跟蹤用於計算特征的數據源。方法還可以手動更新數據源特性庫Python API.
使用特性庫Python API添加數據源
下麵是一些示例命令。詳情請參見API文檔.
從databricks.feature_store進口FeatureStoreClientfs=FeatureStoreClient()使用' source_type="table"在metastore中添加一個表作為數據源。fs.add_data_sources(feature_table_name=“點擊”,data_sources=“user_info.clicks”,source_type=“表”)使用' source_type="path" '添加一個路徑格式的數據源。fs.add_data_sources(feature_table_name=“user_metrics”,data_sources=“dbfs: / FileStore / user_metrics.json”,source_type=“路徑”)如果源不是表或路徑,則使用' source_type="custom"。fs.add_data_sources(feature_table_name=“user_metrics”,data_sources=“user_metrics.txt”,source_type=“自定義”)
使用特性庫Python API刪除數據源
詳情請參見API文檔.
請注意
以下命令刪除與數據源名稱匹配的所有類型(“表”、“路徑”和“自定義”)的數據源。
從databricks.feature_store進口FeatureStoreClientfs=FeatureStoreClient()fs.delete_data_sources(feature_table_name=“點擊”,sources_names=“user_info.clicks”)
刪除特性表
您可以通過特性庫界麵或特性庫Python API.
請注意
刪除特性表可能會導致上遊生產者和下遊消費者(模型、端點和計劃的作業)出現意外故障。您必須通過雲提供商刪除已發布的在線商店。
當您使用API刪除特性表時,底層的Delta表也會被刪除。從UI中刪除特性表時,必須單獨刪除底層Delta表。
通過UI刪除特性表
在特征表頁麵,單擊在特性表名稱的右側進行選擇刪除.如果你沒有可以管理功能表的權限,您將看不到此選項。
在“刪除特性表”對話框中,單擊刪除來確認。
如果你也想的話刪除底層的Delta表,在筆記本電腦中執行以下命令。
%sql下降表格如果存在<feature_table_name>;
支持的數據類型
特性商店支持以下功能PySpark數據類型:
IntegerType
FloatType
BooleanType
StringType
倍增式
LongType
TimestampType
DateType
ShortType
ArrayType
BinaryType
(v0.3.5及以上版本)DecimalType
(v0.3.5及以上版本)MapType
(v0.3.5及以上版本)
上麵列出的數據類型支持機器學習應用程序中常見的特征類型。例如:
您可以將密集向量、張量和嵌入存儲為
ArrayType
.您可以將稀疏向量、張量和嵌入存儲為
MapType
.可以將文本存儲為
StringType
.
Feature Store界麵根據特性數據類型顯示元數據:
當發布到網上商店時,ArrayType
而且MapType
特性以JSON格式存儲。