将Case类中的Map类型转换为StructField类型

use*_*577 7 scala apache-spark

我有一个案例类,我想在Spark中转换为模式

case class test(request1:Map[String, Any],response1:Option[String] = None,)
Run Code Online (Sandbox Code Playgroud)

如何将此类转换为架构对象

val mySchema = StructType(
StructField("request1", Map[String, Any], false),StructField(" response1", Option[String],true))
Run Code Online (Sandbox Code Playgroud)

DataType中没有地图和选项

zer*_*323 9

无法使用此案例类来创建DataFrame架构.虽然Spark支持map via MapTypeOptions使用已Nones转换为的包装类型进行处理NULLs,但Any不支持类型的schema .

假设您将Value类型更改为String:

case class Test(request1: Map[String, String], response1: Option[String] = None)
Run Code Online (Sandbox Code Playgroud)

相应的模式应如下所示:

StructType(Seq(
   StructField("request1", MapType(StringType, StringType, true), true),
   StructField("response1", StringType, true)
))
Run Code Online (Sandbox Code Playgroud)