更改Spark Dataframe的架构

时间:2017-09-06 12:17:55

标签: scala apache-spark dataframe spark-dataframe

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

我只有ComplexType的模式(有超过400个字段),这种类型没有case类。我知道映射必要的字段(但我不知道如何从DataFrame[SimpleType] -> DataFrame[ComplexType]映射它),我想要留下的其余字段为空。有谁知道如何以最有效的方式做到这一点?

由于

修改

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

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

1 个答案:

答案 0 :(得分:0)

这很简单:

// 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. Get field names list from case class的作者致记,我已复制其功能以获取带有修改的字段名称