我想在Spark中执行一个大型进程,试图避免使用Spark Streaming。 我需要从Cassandra读取,操作数据并写入另一个Cassandra表。
我使用数据框作为源表,dataframe.rdd
;我得到一个RDD来应用地图来操纵行,然后用saveToCassandra
将RDD保存到cassandra。
Spark读取所有数据,应用地图然后写入所有数据。这会导致大量的HDD缓存,如果可能的话,我希望避免使用。
有没有办法以块的形式执行所有操作(读取,修改,写入),而不是读取整个表,然后才写入所有数据?
我的代码:
val foo = df.rdd.map { row =>
val a = foo(row) //Transform row to scala case class
function(a) //Return manipulated data
}
foo.repartitionByCassandraReplica(...).saveToCassandra(...)