【发布时间】:2018-09-05 22:43:23
【问题描述】:
我在将数据从 AWS Redshift 读取到我的 Spark 集群时遇到问题。读取超时并导致火花作业失败。我正在使用以下内容将数据检索到数据框中:
def retrieveFromDate(date: String): org.apache.spark.sql.DataFrame = {
val query = "tstamp >= '2018-01-01' and tstamp < '2018-01-02'"
val predicates = Array[String](query)
val props = new Properties()
props.put("user", "username")
props.put("password", "password")
spark.read
.jdbc(url=jdbcURL,
table="myschema.mytable",
predicates=predicates,
connectionProperties=props)
}
以下查询直接在 SQL 中快速返回 2400 万行:
select * from myschema.mytable
WHERE tstamp >= '2018-08-01'
AND tstamp < '2018-08-02';
在 Spark 中,当我对数据帧执行任何操作(包括 count)时,作业就会失败。
如果我提供额外的谓词,例如指定另一个 WHERE 子句,以便结果集非常小,一切正常。 当它直接在 SQL 中正常工作时,为什么这个查询在 spark 中这么慢?有什么办法可以将这么大的结果表从 redshift 加载到 spark 中吗?
我的开发 AWS EMR 集群包含一个 M4.xlarge 主节点和 2 个 M3.xlarge 工作节点。每个工作人员大约需要 15GB 内存和 8 个 cpu 内核。
【问题讨论】:
标签: apache-spark