我在加载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。