更改Spark DataFrame的模式



我有一个 DataFrame[SimpleType]。SimpleType是包含16个字段的类。但是我必须将其更改为DataFrame[ComplexType]

我只有复杂类型的模式(有400个字段),此类型没有案例类。我知道映射必要字段(但我不知道如何从 DataFrame[SimpleType] -> DataFrame[ComplexType]映射它),我想离开的其余字段以nulls为单位。有人知道如何以最有效的方式做到这一点吗?

谢谢

编辑

class SimpleType{
field1
field2
field3
field4
.
.
.
field16
}

我有包含此简单类型的数据框架。我也有一个复杂类型的模式。我想转换此DataFrame[SimpleType] -> Dataframe[ComplexType]

这很简单:

// function to get field names
import scala.reflect.runtime.universe._

def classAccessors[T: TypeTag]: List[String] = typeOf[T].members.collect {
    case m: MethodSymbol if m.isCaseAccessor => m}
.toList.map(s => s.name.toString)
val typeComplexFields = classAccessors[ComplexType]
val newDataFrame = simpleDF
                   .select(typeComplexFields
                            .map(c => if (simpleDF.columns.contains(c)) col(c) else lit(null).as(c)) : _*)
.as[ComplexType]

信用scala的作者也是学分。从案例类获取字段名称列表,我复制了他的功能以获取带有修改的字段名称

相关内容

  • 没有找到相关文章

最新更新