我遵循的基本指南使用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地圖索引器和編碼器和他們所有人的名字,所以這不是問題。
任何想法如何我可以算出來了嗎?
我之前為空字符串搜索原始表失敗。所以,我猜,發生了什麼是,盡管索引列上運行編碼器,編碼器驗證對原始列,而忽略了“handleInvalid”選項,導致錯誤。這是非常混亂。這是一個解決:
transform_empty = udf(λ年代:“NA”如果= =”“其他年代,StringType())的上校indexed_in_categorical_columns:火車=火車。withColumn (col transform_empty (col))
我之前為空字符串搜索原始表失敗。所以,我猜,發生了什麼是,盡管索引列上運行編碼器,編碼器驗證對原始列,而忽略了“handleInvalid”選項,導致錯誤。這是非常混亂。這是一個解決:
transform_empty = udf(λ年代:“NA”如果= =”“其他年代,StringType())的上校indexed_in_categorical_columns:火車=火車。withColumn (col transform_empty (col))