格式化SQLContext的JSON文件

时间:2015-12-22 16:13:52

标签: json apache-spark apache-spark-sql

我在加载依赖于输入JSON文件格式的JSON时遇到问题。

根据JSON数据集上的Spark文档,输入文件中的每一行必须是有效的JSON对象。重新:

“请注意,作为json文件提供的文件不是典型的JSON文件。每行必须包含一个单独的,自包含的有效JSON对象。因此,常常的多行JSON文件将最常见失败“。

所以,如果我有一个输入JSON文件,如:

{
"Year": "2013",
"First Name": "DAVID",
"County": "KINGS",
"Sex": "M",
"Count": "272"
},
{
"Year": "2013",
"First Name": "JAYDEN",
"County": "KINGS",
"Sex": "M",
"Count": "268"
}

是否有任何现有工具或脚本可转换为:

{"Year": "2013","First Name": "DAVID","County": "KINGS","Sex": "M","Count":"272"},
{"Year": "2013","First Name": "JAYDEN","County": "KINGS","Sex": "M","Count": "268"}

JSON符合“每行必须包含一个单独的,自包含的有效JSON对象”

如果我格式化为上面的这种风格,事情会按预期工作。但是,我在几行上手动制作了这些mod。我无法对整个数据集执行此操作,因此需要查找现有脚本或工具。

OR

如果这是一个更好的选择,我可以加载到JDBC可用数据库。想法?

提前致谢

2 个答案:

答案 0 :(得分:3)

您可以先使用sc.wholeTextFiles()将JSON文件加载到RDD中,然后删除文件名列,然后对RDD内容运行SQLContext读取。

e.g。

val jsonRdd = sc.wholeTextFiles("samplefile.json").map(x => x._2)
val jsonDf = sqlContext.read.json(jsonRdd)

答案 1 :(得分:-1)

如果通过添加方括号将其设为数组,该怎么办?像这样;

  [
    {
    "Year": "2013",
    "FName": "DAVID",
    "County": "KINGS",
    "Sex": "M",
    "Count": "272"
    },
    {
    "Year": "2013",
    "FName": "JAYDEN",
    "County": "KINGS",
    "Sex": "M",
    "Count": "268"
    }
    ]

如果我拿走你的文件并添加括号,我可以用Node.js迭代它并输出一个看起来像你想要的文件。 node.js中的警告是我无法使用变量名字 - 我必须将其更改为FName。