我有數據存儲在特性表,加上在數據湖。功能表將滯後湖的數據至少一點。我想過濾數據的特性存儲通過查詢數據查找湖鑰匙從我的索引過濾通過一個或多個屬性(如時間、地點、成本中心,等等)。這樣做很容易通過提供我查詢的結果作為一個dataframe傳遞到“FeatureStoreClient.create_training_set ()”。
然而,我遇到一些麻煩,如果我想火車模型,確定查找鍵功能表中不存在。例如,如果我有鑰匙1 - 4在湖裏,並編寫一個查詢,返回3和5,然後“create_training_set()的返回3旁邊特性和5旁邊一堆空值。這導致SKLearn窒息,因為不符合()的函數過濾掉錯誤數據前培訓。至少我可以減輕這種通過運行的輸出“create_training_set()”通過“dropna()的運行符合()的前擺脫任何行NULL值。
這就變成了真正的問題在哪裏運行批處理推理MLFlow模型。當提供一組查找鍵FeatureStoreClient.score_batch()”沒有辦法攔截的關鍵在被評估,因此不能用“ValueError:輸入包含NaN,無窮或值太大,dtype (float64)”。我沒有看到一個選項來力”score_batch()的未知特性存儲刪除鍵,也我可以想出的解決方法看起來非常幹淨。第一就是直接從湖數據查詢模型推理和忘記特性存儲。第二種是使用“create_training_set()的返回隻列為因變量,但因為它不會過濾掉鑰匙不知道提前特性存儲,我最終不得不拿整個行存儲的功能,運行“dropna()”,然後通過隻查找鍵列到“score_batch ()”。還有其他的清潔方式,我沒有想到什麼?
也許這一切都是毫無意義,因為人們不會從特性存儲在實踐中運行批推論(我自己就對原始數據進行分類,個人),但是我認為它的測試人員將很高興提供途徑讓人們不要無意中破壞提供了方法。不管怎樣,謝謝你的考慮,希望不久我們可以至少有一個選項來防止功能存儲api處理功能表鍵缺席。
@Stephen Wylie:
在批處理丟失的鑰匙推理的一種方法是使用一個連接之間查找鍵和功能表。這將允許你過濾掉之前未知的密鑰傳遞給score_batch(),並避免問題和nan dropna ()。這裏有一個例子使用PySpark如何實現這個:
從pyspark.sql。功能導入坳#定義查找鍵你想得分lookup_keys = [“key1”、“key2”,“key3”、“key4”、“key5”】#創建一個DataFrame查找鍵lookup_df = spark.createDataFrame(((鍵)鍵lookup_keys], [" lookup_key "]) #功能表讀入DataFrame feature_df = spark.read.format .load(“δ”)(“路徑/ /功能/表”)#加入與功能表查找鍵,並過濾掉score_df = lookup_df未知密鑰。加入(feature_df (“lookup_key”),“left_outer”) .filter(坳(lookup_key) .isNotNull()) #通過結果DataFrame score_batch()預測=客戶。score_df score_batch (“model_name”)
這應該允許你過濾掉之前未知的密鑰傳遞給score_batch(),而不需要從功能獲取整個行存儲和運行dropna ()。