我正在嘗試通過Spark SQL將非常大的MySQL表的內容批量遷移到parquet文件。但是當這樣做的時候,我很快就會耗盡內存,即使設置驅動程序的內存限制更高(我在本地模式下使用spark)。示例代碼:通過Spark SQL進行批量數據遷移
Dataset<Row> ds = spark.read()
.format("jdbc")
.option("url", url)
.option("driver", "com.mysql.jdbc.Driver")
.option("dbtable", "bigdatatable")
.option("user", "root")
.option("password", "foobar")
.load();
ds.write().mode(SaveMode.Append).parquet("data/bigdatatable");
好像星火嘗試讀取整個表的內容到內存中,這是不會工作非常好。那麼,通過Spark SQL進行批量數據遷移的最佳方法是什麼?
您是得到OOM不是因爲spark配置錯誤,你可能應該啓用驅動流: http://stackoverflow.com/a/2448019/2439539 – r90t