如何使用Spark在数据框中创建架构数组

RJK*_*RJK 5 scala apache-spark

我有创建数据框的代码,如果我的输入数据中没有数组,则可以正常工作。

我尝试使用没有数组的Json数据,它成功运行。我的代码是

val vals = sc.parallelize(
  """{"id":"1","name":"alex"}""" ::
  Nil
)

val schema = (new StructType)
      .add("id", StringType)
      .add("name", StringType)


  sqlContext.read.schema(schema).json(vals).select($"*").printSchema()
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我有如下所示的数组输入数据,那么如何创建模式?

     val vals = sc.parallelize(
  """{"id":"1","name":"alex","score":[{"keyword":"read","point":10}]}""" ::
  Nil
)


val schema = (new StructType)
      .add("id", StringType)
      .add("name", StringType)
Run Code Online (Sandbox Code Playgroud)

谢谢。

RJK*_*RJK 5

好的,我可以在代码中找到解决方案。

在数据帧中的数组中创建模式可以触发此代码。

val vals = sc.parallelize(
  """{"id":"1","name":"alex","score":[{"keyword":"read","point":10}]}""" ::
  Nil
)

val schema = StructType(
      Array(
        StructField("id", StringType),
        StructField("name", StringType),
        StructField("score", ArrayType(StructType(Array(
          StructField("keyword", StringType),
          StructField("point", IntegerType)
        ))))
      )
    )
Run Code Online (Sandbox Code Playgroud)

然后您打印架构

sqlContext.read.schema(schema).json(vals).select($"*").printSchema()
Run Code Online (Sandbox Code Playgroud)

谢谢解决