我有一个由一些Java bean组成的RDD。每个豆子都有一个标签,其中包含一些子项目,例如一个由某些项目组成的订单。我想将此RDD [订单]转换为RDD [ROW],然后将订单和项目插入蜂箱内的订单表和项目表。以下是我的代码:
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,...)
})
})
问题在于"订购"是rdd [seq [itemrow]],但我想要一个rdd [itemrow]。有人知道该怎么做吗?谢谢!
可以这样写:
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)