我正在使用Spark和Scala处理数据,并将其保存在json
df2.write.mode("overwrite").json("mydata")
输出如下:
{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":10063}
{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":3142}
{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":7766}
我使用d3
d3.json
创建可视化数据
d3.json("mydata.json", function(d){
console.log(d)
};
我的问题是d3.js
期望json
格式如下:
[{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":10063},
{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":3142},
{"GPS_LAT":xx.xxxxx,"GPS_LONG":xx.xxxxx,"count":7766}]
谁错了?火花还是d3
?如果不必手动添加[,]
,我该怎么做才能缓解这种情况?
答案 0 :(得分:2)
我不知道Spark,但我可以说这不是一个有效的JSON,你只有一堆没有包装在数组中的对象。那么,对于“谁错了?”,我会说Spark。
但是有一个(丑陋的)解决方法。使用d3.text
加载 thing (那一堆对象):
d3.text("data.json", function(data){});
然后,您的data
将是一个字符串。下一步是按新行分割字符串:
data = data.match(/[^\r\n]+/g);
然后,我们在一个对象数组中对此进行转换:
data = data.map(function(d){
return JSON.parse(d)
});
所有在一起:
d3.text("data.json", function(data){
data = data.match(/[^\r\n]+/g);
data = data.map(function(d){
return JSON.parse(d)
});
//now you can use 'data' here
});
检查此弹射器中的控制台:https://plnkr.co/edit/ER1oXyWZL62dwxlgaenP?p=preview
而且,既然你有一个对象数组,你可以把它传递给你的D3代码。
PS :如果您在数据中有日期,则可能无效。
答案 1 :(得分:1)
我们还可以有一个小shell
脚本:
sed -i '' 's/}/},/g' file # Add comma between each line
sed -i '' '$ s/.$/]/' file # Replace last comma with ]
sed -i '' '1s/^/[/' file # Add [ at beginning of file
没有让Javascript做腿部工作就可以进行治疗。