只需要处理我的Spark DataFrame中的特定列



我一直在使用这个答案链接,但我有更具体的需求。

我只需要选择以"cat"开头的列。我无法确定如何根据模式选择列。我不需要过滤数据框,只选择名称以模式开头的列。

val transformers: Array[PipelineStage] = df.select("cat*").columns.map(
  cname =>
    new StringIndexer()
      .setInputCol(cname)
      .setOutputCol(s"${cname}_index")
  )
val stages: Array[PipelineStage] = transformers
val pipeline = new Pipeline().setStages(stages)
val model = pipeline.fit(df)

这段代码产生一个错误:

org.apache.spark.sql.AnalysisException: cannot resolve 'cat*' given input columns: [cat3, cat7, cat25,...

为什么要从数据框中选择列呢?为什么不直接过滤掉所有的名字呢?

val transformers: Array[PipelineStage] = df.columns.filter(_.startsWith("cat")).map(
  cname =>
    new StringIndexer()
      .setInputCol(cname)
      .setOutputCol(s"${cname}_index")
  )

这很简单。您只需对以"cat"开头的列进行过滤,如下所示:

val transformers: Array[PipelineStage] = df.select("cat*").columns.filter(_.startsWith("cat")).map(
          cname =>
           new StringIndexer()
              .setInputCol(cname)
              .setOutputCol(s"${cname}_index")
    )

相关内容

  • 没有找到相关文章