为 SQLContext 格式化 JSON 个文件
Formatting JSON files for SQLContext
我在加载 JSON 时遇到问题,这取决于输入 JSON 文件的格式。
根据关于 JSON 数据集的 Spark 文档,输入文件中的每一行都必须是有效的 JSON 对象。回复:
"Note that the file that is offered as a json file is not a typical JSON file. Each line must contain a separate, self-contained valid JSON object. As a consequence, a regular multi-line JSON file will most often fail."
所以,如果我有一个输入 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 符合 "Each line must contain a separate, self-contained valid JSON object"
如果我将格式设置为上面的这种样式,一切都会按预期进行。但是,我在几行中手动制作了这些模组。我无法对整个数据集执行此操作,因此需要寻找现有的脚本或工具。
或
如果这是更好的选择,我可以加载到 JDBC 可用数据库。想法?
提前致谢
您可以先使用 sc.wholeTextFiles()
简单地将 JSON 文件加载到 RDD 中并删除文件名列,然后 运行 SQLContext
读取 RDD 内容.
例如
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。
我在加载 JSON 时遇到问题,这取决于输入 JSON 文件的格式。
根据关于 JSON 数据集的 Spark 文档,输入文件中的每一行都必须是有效的 JSON 对象。回复:
"Note that the file that is offered as a json file is not a typical JSON file. Each line must contain a separate, self-contained valid JSON object. As a consequence, a regular multi-line JSON file will most often fail."
所以,如果我有一个输入 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 符合 "Each line must contain a separate, self-contained valid JSON object"
如果我将格式设置为上面的这种样式,一切都会按预期进行。但是,我在几行中手动制作了这些模组。我无法对整个数据集执行此操作,因此需要寻找现有的脚本或工具。
或
如果这是更好的选择,我可以加载到 JDBC 可用数据库。想法?
提前致谢
您可以先使用 sc.wholeTextFiles()
简单地将 JSON 文件加载到 RDD 中并删除文件名列,然后 运行 SQLContext
读取 RDD 内容.
例如
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。