2016-09-14 175 views
2

我有创建数据框架的代码,如果在我的输入数据中没有数组,那么这可以正常工作。如何使用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() 

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

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


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

谢谢。

+1

有在网络上这么多的文章。你有什么尝试? – Samar

回答

3

奥克,我可以在我的代码中有解决方案。

在数据框中创建数组中的模式会产生这样的代码。

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) 
     )))) 
    ) 
    ) 

,则在打印模式

sqlContext.read.schema(schema).json(vals).select($"*").printSchema() 

感谢解决

相关问题