Spark Transformers [Scala]:在提供完整数据之前了解模式转换结果

Spark Transformers [Scala]: Knowing schema transformation result before feeding the full data

如果我想知道 Transformer 是如何改变架构的,有没有我可以使用的方法?不提供数据?例如,我有一个很大的 DataFrame,但我不想将它与转换器一起使用;我只想知道发生的架构转换而不使用完整数据。

Transfomer的是惰性的(没有fit阶段)所以即使你传递了数据,也不应该有明显的延迟。

但是PipelineStages(包括TransfromersEstimators)都提供了transformSchema方法,可以直接调用,以StructType作为争论。例如,如果您 StringIndexer 像这样

import org.apache.spark.ml.feature.StringIndexer

val indexer = new StringIndexer().setInputCol("foo").setOutputCol("foo_indexed")

和这样的架构

import org.apache.spark.sql.types._

val schema = StructType(Seq(StructField("foo", StringType)))

您可以按如下方式申请:

indexer.transformSchema(schema)

并得到

org.apache.spark.sql.types.StructType = StructType(StructField(foo,StringType,true), StructField(foo_indexed,DoubleType,false))