首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将csv转换为json时java堆空间错误,但d3.csv()没有错误

将csv转换为json时java堆空间错误,但d3.csv()没有错误
EN

Stack Overflow用户
提问于 2015-11-04 06:00:48
回答 1查看 407关注 0票数 1
  • 正在使用的平台:
  • 语言: scala,javascript

我使用d3js读取一个大小为40 to的csv文件,它可以很好地处理以下代码:

代码语言:javascript
复制
<script type="text/javascript">
d3.csv("test.csv", function(data) {
    // data is JSON array. Do something with data;
    console.log(data);
});
</script> 

现在,我们的想法是避免使用d3js,而是在scala中构造JSONarray并通过z.angularBind()在javascript代码中访问这个变量。以下两种代码都适用于较小的文件,但对于大小为40 of的CSV文件,则会给出java堆空间错误。我无法理解的是,当d3.csv()能够在没有任何堆空间错误的情况下完美地完成工作,为什么下面的代码中的这两个不能完成呢?

编辑代码1:使用scala的

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.FileReader;
import org.json._
import scala.io.Source

var br = new BufferedReader(new FileReader("/root/test.csv"))
var contentLine = br.readLine();
var keys = contentLine.split(",")
contentLine = br.readLine();
var ja = new JSONArray();
while (contentLine != null) {
    var splits = contentLine.split(",")
    var i = 0
    var jo = new JSONObject()
    for(i <- 0 to splits.length-1){
        jo.put(keys(i), splits(i));    
    }
    ja.put(jo);
    contentLine = br.readLine();
}
//z.angularBind("ja",ja.toString()) //ja can be accessed now in javascript (EDITED-10/11/15)

编辑代码2: --我认为如果像下面的代码那样使用Apache构造JSON数组,堆空间问题就会消失,但是这个也会导致堆空间错误:

代码语言:javascript
复制
def myf(keys: Array[String], value: String):String = {
    var splits = value.split(",")
    var jo = new JSONObject()
    for(i <- 0 to splits.length-1){            
        jo.put(keys(i), splits(i));
    }
    return(jo.toString())
}

val csv = sc.textFile("/root/test.csv")
val firstrow = csv.first
val header = firstrow.split(",")
val data = csv.filter(x => x != firstrow)

var g = data.map(value => myf(header,value)).collect()
// EDITED BELOW 2 LINES-10/11/15
//var ja= g.mkString("[", ",", "]") 
//z.angularBind("ja",ja) //ja can be accessed now in javascript
EN

回答 1

Stack Overflow用户

发布于 2015-11-04 07:44:19

您正在创建JSON对象。它们不是java/scala固有的,因此将在该环境中占用更多的空间。z.angularBind()真正做了什么?

此外,javascript环境的堆大小(请参阅https://www.quora.com/What-is-the-maximum-size-of-a-JavaScript-object-in-browser-memory中的chrome)和java环境的堆大小(请参见How is the default java heap size determined?)。

更新:删除回答中我误解问题的原始部分

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33514734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档