1
  • 使用プラットフォーム:Apache Zeppelin
  • 言語: scala、javascript

私は d3js を使用してサイズが ~40MB の csv ファイルを読み取り、以下のコードで完全に正常に動作します。

<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 コードでこの変数にアクセスすることです。以下のコードは両方とも小さいファイルには機能しますが、サイズが 40MB の CSV ファイルに対して Java ヒープ スペース エラーが発生します。私が理解できないのは、d3.csv() がヒープ スペース エラーなしでジョブを完全に実行できる場合です。なぜこれら 2 以下のコードを実行できないのですか?

編集されたコード 1: scala の使用

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 spark を使用して JSON 配列を構築すると、ヒープ スペースの問題が解決する可能性があると思いましたが、これもヒープ スペース エラーが発生します。

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
4

1 に答える 1

0

JSON オブジェクトを作成しています。それらは Java/scala にネイティブではないため、その環境ではより多くのスペースを占有します。z.angularBind() は実際に何をしますか?

また、JavaScript 環境のヒープ サイズ (Chrome についてはhttps://www.quora.com/What-is-the-maximum-size-of-a-JavaScript-object-in-browser-memoryを参照) と、 Java 環境 (デフォルトの Java ヒープ サイズはどのように決定されますか?を参照してください)。

更新:質問を誤解した回答の元の部分を削除しました

于 2015-11-04T07:44:19.967 に答える