Scala 如何正确地将name和type数组映射到StrucField数组

Scala 如何正确地将name和type数组映射到StrucField数组,scala,apache-spark,Scala,Apache Spark,我遇到的一个简单问题是: val t = StructField("attName", DecimalType,true) type mismatch, expected: DataType, actual: DecimalType.type 我想创建一个case类,它可以用于自动生成structField数组。所以我开始尝试这个 case class MyClass1(attributeName: String, attributeType: DataType) 为了创建我的test1:

我遇到的一个简单问题是:

val t = StructField("attName", DecimalType,true)

type mismatch, expected: DataType, actual: DecimalType.type
我想创建一个case类,它可以用于自动生成structField数组。所以我开始尝试这个

case class MyClass1(attributeName: String, attributeType: DataType)
为了创建我的test1:

val test1 = Array(
  MyClass1("att1", StringType),
  MyClass1("att2", IntegerType),
  MyClass1("att3", DecimalType)
)
这是错误的,因为具有DecimalType的第三行抛出了错误。(DecimalType不是数据类型)。所以我尝试了第二个这样的案例

case class MyClass2[T](attributeName: String, attributeType: T)

val test2 = Array(
  MyClass2("att1", StringType),
  MyClass2("att2", IntegerType),
  MyClass2("att3", DecimalType)
)
现在可以了,但下面的行不起作用,因为Decimal不是数据类型

val myStruct = test2.map(x =>
  StructField(x.attributeName,x.attributeType, true)
)

这是我的问题。如何使用DecimalType创建StructField,您认为我的caseclass是一个好方法吗?谢谢

DecimalType不是一个单例-它必须以给定的精度和比例初始化:

import org.apache.spark.sql.types.{DataType, DecimalType}

DecimalType(38, 10): DataType
org.apache.spark.sql.types.DataType=DecimalType(38,10)
也就是说,
StructField
已经是一个case类,它为
nullable
true
)和
元数据提供了默认参数,因此另一个表示似乎是多余的