Я пытаюсь научиться использовать Apache Spark, и у меня возникают проблемы с попыткой суммировать все значения в столбце из Cassandra (используя искру datastax -cassandra-разъем). Все, что я пытаюсь сделать, просто приводит к java.lang.OutOfMemoryError: Java heap space.Агрегация Spark 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)
}
}
Прямо сейчас у меня есть только один узел искрового уборщица в моей группе, и это, безусловно, возможно, что, учитывая размер таблицы, не все это может сразу вписываться в память. Однако я не думал, что это будет проблемой, поскольку искра должна лениво оценивать команды, а суммирование всех значений в столбце не обязательно должно содержать всю таблицу в памяти сразу.
Я очень новичок в этой теме, поэтому любое разъяснение относительно того, почему это не сработает или поможет, как правильно это сделать, было бы очень признательно.
Благодаря
Вы совершенно правы, что не должно загружать все в память. Можете ли вы включить ведение журнала отладки, чтобы узнать, что такое размер разделения? какую версию коннектора вы используете? сколько разделов (искровых разделов/задач) создаются - вы можете видеть это в искровой веб-консоли? где вы получаете OOM - это у исполнителя или приложения-драйвера? –