[英]Convert case class constructor parameters to String Array in Scala
我有一个案例类,如下所示:
case class MHealthUser(acc_Chest_X: Double, acc_Chest_Y: Double, acc_Chest_Z: Double, activityLabel: Int)
这些构成Spark DataFrame的架构,这就是为什么我使用case类的原因。 我只想将它们映射到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")
我已经玩了一段时间了,无法正常工作。 任何想法表示赞赏。 谢谢!
我会用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]()
}
在Spark外部查看Scala。 从案例类获取字段名称列表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.