apache spark DataFrame 操作读取 json 文件

apache spark DataFrame Operations reading json file

我正在尝试在 spark 上搜索词。首先,我创建 sql 上下文

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

然后我创建了一个 json 文件并保存在 scala 路径中

{
   {"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]

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 值,正如 spark 所要求的那样,你会想要更像的东西:

    {"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 控制台 window 中解析 json。

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