爆炸阵列<阵列>的数据帧从JSON阶创建

问题描述:

我有JSON数据等:爆炸阵列<阵列<string>>的数据帧从JSON阶创建

{ 
    "resultid": "Success", 
    "userId": "abc", 
    "cardtype": "ag", 
    "computescore": [{ 
     "values": ["654", "655", "666"] 
    }, { 
     "values": ["754", "755", "777"] 
    }] 
} 

scala> val a = input.select("computescore.values") 
a: org.apache.spark.sql.DataFrame = [values: array<array<string>>] 

scala> a.collect.foreach(println) 
[WrappedArray(WrappedArray(654, 655, 666), WrappedArray(754, 755, 777))] 

我想从这个实现的是数据帧具有多个行和例如多列

a1  a2 a3 
654 655 666 
754 755 777 

做这个

val input = sqlContext.jsonFile("D:/test.json") 
val a = input.select("computescore.values") 

val b=a.explode("values","mvnew"){test: WrappedArray[WrappedArray[String]] => test.asInstanceOf[WrappedArray[WrappedArray[String]]]} 
val c=b.select("mvnew") 
val d=c.map {case Row(col2: WrappedArray[String]) => (col2(0), col2(1), col2(2))}.toDF("Col2", "Col3", "Col4") 
达标

有没有更好的方法来做到这一点