在scala运行时从Object中获取类


import org.apache.spark.sql.types.StructField
import org.apache.spark.sql.types.StructType
import org.apache.spark.sql.types.StringType
import org.apache.spark.sql.type.NumericType
import org.apache.spark.sql.type.BooleanType
   ....
   ....
val TableSchema = Array(
      ("ID", IntegerType),
      ("Name", StringType),
      ("TNum", integerType),
      ("Handled", BooleanType),
      ("Value", StringType)
      )

我有一个表的模式信息数组,我试图将其映射到可以在spark数据框创建中使用的结构体。转换后的数组应该如下所示:

val struct = Array(
 StructField("ID", NumericType),
 StructField("Name", BooleanType),
 StructField("TNum", NumericType),
 StructField("Handled", BooleanType),
 StructField("Value", StringType))

所以我试图写一个方法,将每个元素转换为StructField。这是我的尝试:

    def mapToStruct(arr:Array[(String, String, Object)])={
     val newArr = arr.map(ele => StructField(ele._1, ele._2))
     newArr
   }

在这种情况下,我无法从mapToStruct方法的第三个参数中获得StringType, BooleanTypeIntegerType的类。例外是type mismatch; found : Object required: org.apache.spark.sql.types.DataType。但是如果我将参数类型更改为Array[(String, String, DataType)],它与变量类型不匹配。

我的问题是我应该为mapToStruct方法的第三个参数选择什么数据类型,然后我可以在运行时获得这个对象的类。

应该可以:

import org.apache.spark.sql.types.
val tableSchema: Array[(String, DataType)] = Array(
  ("ID", IntegerType),
  ("Name", StringType),
  ("Handled", BooleanType),
  ("Value", StringType)
  )
def mapToStruct(arr: Array[(String, DataType)]): Array[StructField] = arr.map(e => StructField(e._1, e._2))

相关内容

  • 没有找到相关文章

最新更新