【发布时间】:2016-12-26 23:45:07
【问题描述】:
我目前正在尝试通过 Spark SQL 将一个非常大的 MySQL 表的内容批量迁移到 parquet 文件中。但是这样做时,我很快就会耗尽内存,即使将驱动程序的内存限制设置得更高(我在本地模式下使用 spark)。示例代码:
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 似乎试图将整个表格内容读入内存,但效果并不好。那么,通过 Spark SQL 进行批量数据迁移的最佳方法是什么?
【问题讨论】:
-
您得到 OOM 不是因为 spark 配置错误,您可能应该在驱动程序中启用流式处理:stackoverflow.com/a/2448019/2439539
标签: apache-spark apache-spark-sql spark-dataframe