为SQLContext格式化JSON文件



我在加载JSON时遇到问题,这些问题取决于输入JSON文件的格式。

根据Spark关于JSON数据集的文档,输入文件上的每一行都必须是有效的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。我无法对整个数据集执行此操作,所以请查找现有的脚本或工具。

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

提前感谢

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

例如

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

如果通过添加方括号使其成为一个数组会怎么样。像这样;

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

如果我取你的文件并添加括号,我可以用Node.js迭代它,并输出一个看起来像你想要的文件。node.js中的警告是我不能使用变量First Name——我不得不将其更改为FName。

相关内容

  • 没有找到相关文章

最新更新