2016-04-30 85 views
1

我正在尝试在火花上的搜索字。首先,我创建SQL上下文apache spark DataFrame操作阅读json文件

scala> val sqlcontext = new org.apache.spark.sql.SQLContext(sc) 

然后我创建了一个JSON文件,并保存在斯卡拉路径

{ 
    {"id" : "1201", "name" : "satish", "age" : "25"} 
    {"id" : "1202", "name" : "krishna", "age" : "28"} 
    {"id" : "1203", "name" : "amith", "age" : "39"} 
    {"id" : "1204", "name" : "javed", "age" : "23"} 
    {"id" : "1205", "name" : "prudvi", "age" : "23"} 
} 

了错误,当我键入此

scala> val dfs = sqlContext.read.json("employee.json") 

错误

dfs: org.apache.spark.sql.DataFrame = [_corrupt_record: string, age: string, id: string, name: string] 
+0

a)Spark JSON阅读器支持JSON行格式而不是多行JSON b)这甚至不是有效的JSON – zero323

+0

@ zero323所以我应该怎么做? – text

+0

首先放下第一个左侧支架和最后一个右侧支架。 – zero323

回答

0

JSON中的一组人将会厕所ķ类似:

{ "people": [ 
    {"id" : "1201", "name" : "satish", "age" : "25"}, 
    {"id" : "1202", "name" : "krishna", "age" : "28"}, 
    {"id" : "1203", "name" : "amith", "age" : "39"}, 
    {"id" : "1204", "name" : "javed", "age" : "23"}, 
    {"id" : "1205", "name" : "prudvi", "age" : "23"} 
    ] 
} 

如果你想每行一个JSON值,火花需要,你想要更多的东西一样:

{"id" : "1201", "name" : "satish", "age" : "25"} 
    {"id" : "1202", "name" : "krishna", "age" : "28"} 
    {"id" : "1203", "name" : "amith", "age" : "39"} 
    {"id" : "1204", "name" : "javed", "age" : "23"} 
    {"id" : "1205", "name" : "prudvi", "age" : "23"} 

在第二种情况下,每一行是一个有效的json文档。在前一种情况下,整个事情是一个有效的JSON文档。在你的情况下,你也没有。有些工具会验证json,例如你可以尝试在Chrome开发人员工具中的javascript控制台窗口中解析json。

从数据建模的角度来看,您通常也希望将年龄表示为出生日期而不是瞬态当前年龄......或者至少是数字而不是字符串。