Spark Transformers [Scala]:在提供完整数据之前了解模式转换结果
Spark Transformers [Scala]: Knowing schema transformation result before feeding the full data
如果我想知道 Transformer
是如何改变架构的,有没有我可以使用的方法?不提供数据?例如,我有一个很大的 DataFrame,但我不想将它与转换器一起使用;我只想知道发生的架构转换而不使用完整数据。
Transfomer
的是惰性的(没有fit
阶段)所以即使你传递了数据,也不应该有明显的延迟。
但是PipelineStages
(包括Transfromers
和Estimators
)都提供了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))
如果我想知道 Transformer
是如何改变架构的,有没有我可以使用的方法?不提供数据?例如,我有一个很大的 DataFrame,但我不想将它与转换器一起使用;我只想知道发生的架构转换而不使用完整数据。
Transfomer
的是惰性的(没有fit
阶段)所以即使你传递了数据,也不应该有明显的延迟。
但是PipelineStages
(包括Transfromers
和Estimators
)都提供了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))