ApacheSparkML StringIndexer ест мои столбцы

При применении StringIndexer к df_notnull (объекту DataFrame), который содержит следующие столбцы:

scala> df_notnull.printSchema
root
 |-- L0_S22_F545: string (nullable = true)
 |-- L0_S0_F0: double (nullable = true)
 |-- L0_S0_F2: double (nullable = true)
 |-- L0_S0_F4: double (nullable = true)

Остались только те:

scala> indexed.printSchema
root
 |-- L0_S22_F545: string (nullable = true)
 |-- L0_S22_F545Index: double (nullable = true)

Это мой код:

:paste
import org.apache.spark.ml.feature.{OneHotEncoder, StringIndexer}

val indexer = new StringIndexer()
  .setInputCol("L0_S22_F545")
  .setOutputCol("L0_S22_F545Index")

val indexed = indexer.fit(df_notnull).transform(df_notnull)
indexed.printSchema

Я хочу сохранить все столбцы и добавить только новые. Что я делаю неправильно?

1 ответ

Решение

Нашел решение здесь. На самом деле трансформаторы должны использоваться не отдельно, а вместе с трубопроводом - тогда столбцы сохраняются:

import org.apache.spark.ml.Pipeline
val transformers = Array(
    indexer,
    encoder
)

var pipeline = new Pipeline().setStages(transformers).fit(df_notnull)

var transformed = pipeline.transform(df_notnull)

Вот как выглядит результат:

scala> transformed.show
+-----------+--------+--------+--------+----------------+--------------+        
|L0_S22_F545|L0_S0_F0|L0_S0_F2|L0_S0_F4|L0_S22_F545Index|L0_S22_F545Vec|
+-----------+--------+--------+--------+----------------+--------------+
|         NA|    0.03|  -0.034|  -0.197|             0.0|(13,[0],[1.0])|
|         NA|     0.0|     0.0|     0.0|             0.0|(13,[0],[1.0])|
|         NA|   0.088|   0.086|   0.003|             0.0|(13,[0],[1.0])|
|         NA|  -0.036|  -0.064|   0.294|             0.0|(13,[0],[1.0])|
|         NA|  -0.055|  -0.086|   0.294|             0.0|(13,[0],[1.0])|
|         NA|   0.003|   0.019|   0.294|             0.0|(13,[0],[1.0])|
|         NA|     0.0|     0.0|     0.0|             0.0|(13,[0],[1.0])|
|         NA|     0.0|     0.0|     0.0|             0.0|(13,[0],[1.0])|
|         NA|  -0.016|  -0.041|  -0.179|             0.0|(13,[0],[1.0])|
|         NA|     0.0|     0.0|     0.0|             0.0|(13,[0],[1.0])|
|         NA|   0.016|   0.093|  -0.015|             0.0|(13,[0],[1.0])|
|         NA|  -0.062|  -0.153|  -0.197|             0.0|(13,[0],[1.0])|
|         NA|  -0.075|  -0.093|   0.367|             0.0|(13,[0],[1.0])|
|         NA|  -0.003|  -0.093|  -0.161|             0.0|(13,[0],[1.0])|
|         NA|  -0.016|  -0.138|  -0.197|             0.0|(13,[0],[1.0])|
|         NA|   0.252|    0.25|   0.003|             0.0|(13,[0],[1.0])|
|         NA|     0.0|     0.0|     0.0|             0.0|(13,[0],[1.0])|
|         NA|  -0.016|  -0.041|   0.003|             0.0|(13,[0],[1.0])|
|         NA|     0.0|     0.0|     0.0|             0.0|(13,[0],[1.0])|
|         NA|   0.088|   0.033|    0.33|             0.0|(13,[0],[1.0])|
+-----------+--------+--------+--------+----------------+--------------+
only showing top 20 rows
Другие вопросы по тегам