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
)和元数据提供了默认参数,因此另一个表示似乎是多余的