2016-11-15 18 views
0

私は私はこのようなCSVファイルに出力を保存するこのスパークSQLのフラット化JSON

{"name":"Michael", "cities":["palo alto", "menlo park"], "schools":[{"sname":"stanford", "year":2010}, {"sname":"berkeley","year":2012}]} 

のように見えるJSONあります

Michael,{"sname":"stanford", "year":2010} 

Michael,{"sname":"berkeley", "year":2012} 

私は次のことを試してみました:

val people = sqlContext.read.json("people.json") 
val flattened = people.select($"name", explode($"schools").as("schools_flat")) 

上記のコードでは、schools_flatをjsonとして指定していません。 期待どおりの出力を得る方法に関するものです。

ありがとうございます。

答えて

0

希望する方法でjsonファイルを読み込むには、明示的にスキーマを指定する必要があります。

+-------+--------------------+ 
| name|  schools_flat| 
+-------+--------------------+ 
|Michael|{"sname":"stanfor...| 
|Michael|{"sname":"berkele...| 
+-------+--------------------+ 
: 'フラット化' データフレームは、このようなものです

import org.apache.spark.sql.catalyst.ScalaReflection 
import org.apache.spark.sql.types.StructType 

case class json_schema_class( cities: String, name : String, schools: Array[String]) 
var json_schema = ScalaReflection.schemaFor[json_schema_class].dataType.asInstanceOf[StructType] 

var people = sqlContext.read.schema(json_schema).json("people.json") 
var flattened = people.select($"name", explode($"schools").as("schools_flat")) 

:それはこのようになります。この場合

関連する問題