2015-04-21 3 views
2

Согласно новым документам Spark, используя Spark's should be preferred over using JdbcRDD.Apache Spark DataFrame нет Разделение RDD

Первое касание было довольно приятным, пока я не столкнулся с первой проблемой - DataFrame не имеет метода flatMapToPair(). Первым делом было преобразовать его в JavaRDD, и я сделал это.

Все было прекрасно, я написал код, используя этот подход, и заметил, что такой код:

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

производит 1. Весь код ниже такого преобразования до JavaRDD абсолютно неэффективен. Перераспределение сил RDD занимает много времени и делает большие накладные расходы, чем код, который работает с 1 разделом.

Как с этим бороться?

При использовании JdbcRDD мы написали специальный 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"))  
Смежные вопросы