2015-04-21 166 views
2

根据新的Spark Docs,使用Spark的DataFrameshould be preferred over using JdbcRDDApache Spark DataFrame无RDD分区

直到遇到第一个问题时,第一次触摸非常愉快 - 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来做类似的事情?

回答

1

`

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