取消
顯示的結果
而不是尋找
你的意思是:

OneHotEncoder失敗與“名稱不能有一個空字符串”

Mr__E
因素二世

我遵循的基本指南使用OneHotEncoder,匹配的語法完全用自己的數據表。表枚舉字符串值。我第一次運行StringIndexer(有或沒有handleInvalid集):

索引器= StringIndexer (inputCols = indexed_in_categorical_columns outputCols = indexed_out_categorical_columns handleInvalid =“保持”,)train_magic = train.select (indexed_in_categorical_columns) .dropna () indexed_stuff = indexer.fit (train_magic) indexed_stuff_df = indexed_stuff.transform (train_magic)

然後我使用的列(我試過單獨列——工作和一些不一樣列)相結合的編碼,和沒有handleInvalid / dropLast設置:

dumb_encoder = OneHotEncoder (handleInvalid =“保持”,dropLast = True, inputCols = indexer.getOutputCols (), outputCols = encoded_out_categorical_columns)

然後我運行編碼器:

encoded_stuff_df = dumb_encoder.fit (indexed_stuff_df.select (indexed_out_categorical_columns))

從這一步是錯誤的:

IllegalArgumentException:需求失敗:無法對名稱有一個空字符串。

輸出是無用的,因為它任何的違規信息值下降。我驗證索引列不null值,我試過(如上所述)運行dropna(),所以它沒有意義。我檢查了param地圖索引器和編碼器和他們所有人的名字,所以這不是問題。

任何想法如何我可以算出來了嗎?

1接受解決方案

接受的解決方案

Mr__E
因素二世

我之前為空字符串搜索原始表失敗。所以,我猜,發生了什麼是,盡管索引列上運行編碼器,編碼器驗證對原始列,而忽略了“handleInvalid”選項,導致錯誤。這是非常混亂。這是一個解決:

transform_empty = udf(λ年代:“NA”如果= =”“其他年代,StringType())的上校indexed_in_categorical_columns:火車=火車。withColumn (col transform_empty (col))

在原帖子查看解決方案

2回答2

Mr__E
因素二世

我之前為空字符串搜索原始表失敗。所以,我猜,發生了什麼是,盡管索引列上運行編碼器,編碼器驗證對原始列,而忽略了“handleInvalid”選項,導致錯誤。這是非常混亂。這是一個解決:

transform_empty = udf(λ年代:“NA”如果= =”“其他年代,StringType())的上校indexed_in_categorical_columns:火車=火車。withColumn (col transform_empty (col))

EliasHaydar
新的貢獻者二世

抓得好!事實上,錯誤是一種誤導。在我的例子中,這是一個特定的字符串隻有空白的列。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map