2017-07-28 83 views
0

數據幀進行遍歷時,我有叫people.jsonArrayOutOfBoundException通過火花SQL

{"name":"Michael"} 
{"name":"Andy", "age":30} 
{"name":"Justin", "age":19} 

下面的代碼給我arrayOutOfBoundsException的數據集。

import org.apache.spark.sql.SparkSession 

    val sparkSession = SparkSession.builder 
    .master("local") 
    .appName("my-spark-app") 
    .config("spark.some.config.option", "config-value") 
    .getOrCreate() 

    val peopleDF = sparkSession.sparkContext. 
    textFile("C:/Users/Desktop/Spark/people.json"). 
    map(_.split(",")). 
    map(attributes => Person(attributes(0),attributes(1).trim.toInt)). 
    toDF() 

    peopleDF.createOrReplaceTempView("person") 

    val teenagersDF = sparkSession.sql("select name, age FROM person") 

    teenagersDF.show() 

看起來像我試圖通過一個空的數據框。誰能告訴我爲什麼這是空的?

+1

第一行(1)中的任何屬性。你爲什麼不直接用'spark.read.json'創建一個數據框? – philantrovert

+0

謝謝你。我爲第一行添加了一個數字。第一行是{「name」:「Michael」,「age」:23}現在我得到java.lang.NumberFormatException:對於輸入字符串:「」age「:23}」 – Srinivas

+0

這是因爲您正在解析它不正確。你需要使用'sparkSession.read.json'來讀取一個json文件作爲數據框。如果數據類似於「Micheal,23」,那麼你的代碼就可以工作。 – philantrovert

回答

0

當你有一個有效的json文件,你應該使用sqlContextjson文件讀入dataframe

import org.apache.spark.sql.SparkSession 

    val sparkSession = SparkSession.builder 
    .master("local") 
    .appName("my-spark-app") 
    .config("spark.some.config.option", "config-value") 
    .getOrCreate() 

    val peopleDF = sparkSession.sqlContext.read.json("C:/Users/Desktop/Spark/people.json") 

    peopleDF.createOrReplaceTempView("person") 

    val teenagersDF = sparkSession.sql("select name, age FROM person") 

    teenagersDF.show() 

這應該工作