繁体   English   中英

将案例类构造函数参数转换为Scala中的字符串数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM