2017-08-29 154 views
1

字符串数组我有一个案例类,如下所示:
case class MHealthUser(acc_Chest_X: Double, acc_Chest_Y: Double, acc_Chest_Z: Double, activityLabel: Int)转换案例类构造函数的参数在斯卡拉

这些形成斯巴克据帧,这就是为什么我使用的情况下,类的模式。我只是想将它们映射到Array[String],所以我可以在Spark中使用ParamValidators.inArray(attributes)方法。我用下面的代码使用反射来构造参数到阵列映射:

val attributes: Array[String] = MHealthUser.getClass.getConstructors.map(a => a.toString) 

但这仅仅给我长度1的阵列,而我想长度为4的阵列,其中所述阵列是所述的内容我定义的数据集模式,作为一个字符串。否则,我使用数据集模式的硬编码值,这显然不雅观。 换句话说,我希望输出:

val attributes: Array[String] = Array("acc_Chest_X", "acc_Chest_Y", "acc_Chest_Z", "activityLabel") 

我一直在玩了一会儿,并不能得到它的工作。任何想法赞赏。谢谢!

回答

0

我会使用ScalaReflection

import org.apache.spark.sql.catalyst.ScalaReflection 
import org.apache.spark.sql.types.StructType 

ScalaReflection.schemaFor[MHealthUser].dataType match { 
    case s: StructType => s.fieldNames 
    case _ => Array[String]() 
} 

外触发看到Scala. Get field names list from case class