簡體   English   中英

用於 StringIndexer 多列的 Spark + Scala 新管道

[英]Spark + scala new pipline for StringIndexer multiple columns

我嘗試在多列上應用StringIndexer() ,我使用ScalaSpark 2.3。
這是我的代碼:

val df1 = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("file:///c:/tmp/spark-warehouse/train.csv")

val feat = df1.columns.filterNot(_ .contains("BsmtFinSF1"))

val inds = feat.map { colName =>
  val indexer1 = new StringIndexer()
    .setInputCol(colName)
    .setOutputCol(colName + "I")
    .fit(df1)

  Array(indexer1)
}

val pipeline = new Pipeline().setStages(inds.toArray)

但是,我有這個錯誤:

錯誤:(134, 50) 類型不匹配;

發現:數組[數組[org.apache.spark.ml.feature.StringIndexerModel]]
要求:數組[? <:org.apache.spark.ml.PipelineStage]

注意:數組[org.apache.spark.ml.feature.StringIndexerModel] >: ? <: org.apache.spark.ml.PipelineStage,但類 Array 在類型 T 中是不變的。您可能希望研究通配符類型,例如_ >: ? <: org.apache.spark.ml.PipelineStage _ >: ? <: org.apache.spark.ml.PipelineStage (SLS 3.2.10)
val 管道 = new Pipeline().setStages(inds.toArray)

任何幫助將不勝感激。 謝謝你

.setStages需要一個Array[PipelineStage] ,但實際上它變成了Array[Array[PipelineStage]因為您將indexer1包裝到冗余 Array 中: Array(indexer1) Map 函數返回相同類型的集合。 此集合的元素由傳遞給 Map 的函數的應用程序產生。 所以試試這樣:

val inds = feat.map { colName =>
   new StringIndexer()
    .setInputCol(colName)
    .setOutputCol(colName + "I")
    .fit(df1)          
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM