当前位置: 首页 > 知识库问答 >
问题:

Spark scala用于StringIndexer多列的新管道

夹谷腾
2023-03-14

我尝试在多个列上应用StringIndexer(),我使用Scala和Spark 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)类型不匹配;

找到:数组[Array[org.apache.spark.ml.feature.StringIndexerModel]
必需:数组[?

注:数组[org.apache.spark.ml.feature.StringIndexerModel]

任何帮助都将不胜感激。非常感谢。

共有1个答案

端木志诚
2023-03-14

。设置标记接受一个数组[PipelineStage],但实际上它变成了数组[Array[PipelineStage],因为您将索引器1包装到冗余数组中:数组(索引器1)。Map函数返回相同类型的集合。此集合的元素由传递给Map的函数的应用程序生成。所以试着这样做:

val inds = feat.map { colName =>
   new StringIndexer()
    .setInputCol(colName)
    .setOutputCol(colName + "I")
    .fit(df1)          
}
 类似资料:
  • 我有一个派斯帕克数据帧 我想将其转换为与 pyspark.ml 一起使用。我可以使用字符串索引器将名称列转换为数字类别: 如何用StringIndexer(例如< code>name和< code>food,每个列都有自己的< code>StringIndexer)转换几个列,然后用VectorAssembler生成一个特征向量?还是必须为每一列创建一个< code>StringIndexer?

  • 如何创建列colMap的ArrayType[StringType]哪个值是数组与元素是字符串匹配的列的名称哪些值为真? 我有这样的输入DataFrame: 我想创建这样的输出DataFrame: 编辑:我发现了这个重复的问题: Spark scala从多列中获取字符串类型的数组 但想知道是否有更好的方法来实现产出?

  •   StringIndexer将标签列的字符串编码为标签索引。这些索引是[0,numLabels),通过标签频率排序,所以频率最高的标签的索引为0。 如果输入列是数字,我们把它强转为字符串然后在编码。 例子   假设我们有下面的DataFrame,它的列名是id和category。 id | category ----|---------- 0 | a 1 | b 2 | c 3

  • 我想将我的自定义函数(它使用if-else梯形)应用到数据帧每行中的这六列(,,,,,)。 我已经尝试了不同的方法从其他问题,但似乎仍然不能找到正确的答案,我的问题。关键的一点是,如果这个人被算作西班牙裔,他们就不能算作其他任何东西。即使他们在另一个种族栏中有一个“1”,他们仍然被算作西班牙裔,而不是两个或两个以上的种族。类似地,如果所有ERI列的总和大于1,则被计为两个或两个以上的种族,不能被计

  • 如何在熊猫身上做到这一点: 更新2:这个问题是在V0.11.0左右提出的。因此,许多问题和答案都不太相关。

  • 我有git monorepo与不同的应用程序。目前,我有一个Jenkinsfile在根文件夹,其中包含应用程序的管道all。当提交只更改了一个应用时,执行所有应用的完整管道非常耗时。 我们使用类似GitFlow的方法进行分支,因此Jenkins中的多分支管道作业非常适合我们的项目。 我正在寻找一种方法,在詹金斯有几个工作,每一个将被触发,只有当适当的应用程序的代码被改变。 我的完美解决方案如下所示