私は Apache Spark の使用方法を学ぼうとしてきましたが、(datastax spark-cassandra-connector を使用して) Cassandra から列のすべての値を合計しようとすると問題が発生します。私が試したすべての結果はjava.lang.OutOfMemoryError: Java heap spaceになります。
スパークマスターに提出するコードは次のとおりです。
object Benchmark {
def main( args: Array[ String ] ) {
val conf = new SparkConf()
.setAppName( "app" )
.set( "spark.cassandra.connection.host", "ec2-blah.compute-1.amazonaws.com" )
.set( "spark.cassandra.auth.username", "myusername" )
.set( "spark.cassandra.auth.password", "mypassword" )
.set( "spark.executor.memory", "4g" )
val sc = new SparkContext( conf )
val tbl = sc.cassandraTable( "mykeyspace", "mytable" )
val res = tbl.map(_.getFloat("sclrdata")).sum()
println( "sum = " + res )
}
}
現在、クラスターには 1 つの Spark ワーカー ノードしかありません。テーブルのサイズを考えると、一度にすべてをメモリに収めることができない可能性は間違いありません。ただし、spark はコマンドを遅延評価することになっているため、これが問題になるとは思いませんでした。列内のすべての値を合計しても、テーブル全体が一度にメモリに存在する必要はありません。
私はこのトピックの初心者なので、なぜこれがうまくいかないのか、正しく行う方法を教えていただければ幸いです。
ありがとう