我尝试在多个列上应用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]
任何帮助都将不胜感激。非常感谢。
。设置标记
接受一个数组[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中的多分支管道作业非常适合我们的项目。 我正在寻找一种方法,在詹金斯有几个工作,每一个将被触发,只有当适当的应用程序的代码被改变。 我的完美解决方案如下所示