Apache spark 为什么从红移到火花的读取速度如此之慢?

Apache spark 为什么从红移到火花的读取速度如此之慢?,apache-spark,Apache Spark,我无法将AWS红移数据读取到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

我无法将AWS红移数据读取到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)
}
def retrieveFromDate(日期:字符串):org.apache.spark.sql.DataFrame={
val query=“tstamp>='2018-01-01'和tstamp<'2018-01-02'”
val谓词=数组[字符串](查询)
val props=新属性()
道具放置(“用户”、“用户名”)
道具放置(“密码”、“密码”)
spark.read
.jdbc(url=jdbcURL,
table=“myschema.mytable”,
谓词=谓词,
connectionProperties=props)
}
以下直接在SQL中执行的查询快速返回2400万行:

select * from myschema.mytable
WHERE tstamp >= '2018-08-01'
  AND tstamp < '2018-08-02';
从myschema.mytable中选择*
其中tstamp>=“2018-08-01”
以及tstamp<'2018-08-02';
在Spark中,当我在数据帧上执行任何操作时,作业都会失败,包括只
count

如果我提供了一个额外的谓词,例如指定另一个
WHERE
子句,使结果集非常小,那么一切都可以正常工作为什么这个查询在spark中运行得这么慢,而在SQL中却可以正常工作?我能做些什么来将这么大的结果表从红移加载到spark中吗?

我的开发AWS EMR集群包含一个M4.xlarge主机和两个M3.xlarge工人。这意味着每个工人大约有15GB的ram和8个cpu核

>> The read is timing out and causing the spark job to fail
谓词参数只是

val query=“tstamp>='2018-01-01'和tstamp<'2018-01-02'

因此,结果数据帧是单个任务的结果“1”的分区,它容纳2400万。它没有平行性

您能否更改并提供将24M数据划分为多个块的谓词。那么,读可以并行化吗

像这样的,

val query=Arry[String](“列>=value1,列=value2和列=value3和列

如果您不想提供所有谓词,请将jdbc方法更改为down类型,并提供lowerBound、upperBound和numPartitions,然后它再次受到分区列中的值的约束,这些值在其范围内是否均匀分布

public Dataset<Row> jdbc(String url,
                String table,
                String columnName,
                long lowerBound,
                long upperBound,
                int numPartitions,
                java.util.Properties connectionProperties)
公共数据集jdbc(字符串url, 字符串表, 字符串列名称, 长的下半身, 长上界, 国际货币基金组织, java.util.Properties(连接属性) 更多细节