Apache Spark DataFrame 没有 RDD 分区

Apache Spark DataFrame no RDD partitioning

根据新的 Spark 文档,使用 Spark 的 DataFrame should be preferred over using JdbcRDD

第一次接触非常愉快,直到我遇到第一个问题 - DataFrame 没有 flatMapToPair() 方法。第一个想法是把它转换成JavaRDD,我做到了。

一切都很好,我使用这种方法编写了我的代码并注意到这样的代码:

JavaRDD<Row> myRDD = dataFrame.toJavaRDD();
int amount = myRDD.partitions().length

产生 1。这种转换为 JavaRDD 下面的所有代码都是绝对低效的。强制对 RDD 进行重新分区会花费大量时间,并且比使用 1 个分区的代码产生更大的开销。

如何处理?

在使用 JdbcRDD 时,我们使用 "pager" 编写了特定的 SQL,例如用于创建分区的 WHERE id >= ? and id <= ?。如何使用 DataFrame?

制作这样的东西

`

 val connectionString` = "jdbc:oracle:thin:username/password@111.11.1.11:1521:ORDERS"                                          
 val ordersDF = sqlContext.load("jdbc", 
                       Map( "url" -> connectionString,
                            "dbtable" -> "(select *  from CUSTOMER_ORDERS)",
                            "partitionColumn" -> "ORDER_ID",
                            "lowerBound"-> "1000",
                            "upperBound" -> "40000",
                            "numPartitions"-> "10"))