1,261
社区成员
发帖
与我相关
我的任务
分享
df.rdd.map(message => {
val key= message.key
val value= message.value
val put: Put = new Put(key.getBytes())
put.addColumn("data".getBytes(), "value".getBytes(), value.getBytes())
put
}).foreachPartition(list => {
val table: Table = HBaseConnectionManager.getConnection().getTable(TableName.valueOf(tableName))
table.put(JavaConversions.seqAsJavaList(list.toSeq))
table.close()
})
HBaseConnectionManager这个类是个scala的object,java里相当于单例,目的是不重复创建数据库连接。
我这段代码是能执行的但是foreachPartition里数量有点多,时间长了就提示我put提交次数过多,所以我现在在优化这段代码
但是当我把代码改成下边这样,只能进入第一个Partition,然后打印出来的数组大小居然是0,if和下边的打印冲突,这个我暂时还没研究明白是为什么
.foreachPartition(list => {
if(list.size>0){
println("数组大小:"+list.size)
val table: Table = HBaseConnectionManager.getConnection().getTable(TableName.valueOf(tableName))
table.put(JavaConversions.seqAsJavaList(list.toSeq))
table.close()
}
})