2015-04-21 163 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"))