2017-03-09 11 views
0

私はいくつかのJava Beanで構成されているRDDを持っています。すべてのBeanには、いくつかの項目からなる1つの注文のような、いくつかのサブ項目を含むハッシュセットがあります。私はこのRdd [Order]をRDD [Row]に変換し、OrderとItemsをHiveのOrderテーブルとItemテーブルに挿入したいと考えています。サブアイテムを持つJava BeanをRDDに変換する方法[行]

val orders = new ListBuffer[Order]() 
val order = new Order(...) 
order.itemSet = scala.collection.mutable.Set.empty[Item] 
val item1 = new Item(...) 
val item2 = new Item(...) 
order.itemSet.add(item1) 
order.itemSet.add(item2) 
orders.add(order) 

val orderRDD = sc.parallize(orders.toSeq) 
val orderRows = orderRDD.map(order => { 
    Row(order_field1, order_field2, ...) 
    }) 
//hiveContext.insert(orderRows) 
val itemRows = orderRDD.map(order => { 
     order.item.map(item => { 
     Row(order_item_field1, order_item_field2,...) 
     }) 
    }) 

問題は "orderRowsは" RDD [配列[itemRow]]であるということですが、私はRDD [itemRow]たい:以下は、私のコードです。誰もこれを行う方法を知っていますか?ありがとう!

+0

"order.item.map(項目=> {" "order.itemSet.map(項目=> {" 間違いのために申し訳ありませんがなければなりません。 – victorming888

答えて

0

が、それはこのように書くことが可能です:

val itemRows = orderRDD.map(order => { 
    order.itemSet.map(item => { 
    Row(order_item_field1, order_item_field2,...) 
    }) 
}).fold(Set.empty[Row])((set1, set2) => set1 ++= set2).toSeq 

val itemRDD = sc.parallize(itemRows) 
関連する問題