我有一个想要从HBase批量删除的对象的RDD。在阅读了HBase文档和示例后,我想出了以下代码:
hc.bulkDelete[Array[Byte]](salesObjects, TableName.valueOf("salesInfo"),
putRecord => new Delete(putRecord), 4)
但是据我了解,salesObjects
必须转换为Array[Byte]
. 既然salesObjects
是一个RDD[Sale]
如何正确将其转换为Array[Byte]
?
我已经尝试过Bytes.toBytes(salesObjects)
但该方法不接受RDD[Sale]
作为参数。销售是一个复杂的对象,因此将每个字段解析为字节会有问题。
现在,我已经将RDD[Sale]
转换为val salesList: List[Sale] = salesObjects.collect().toList
但目前坚持下一步该怎么做。
我从未使用过这种方法,但我会尽力提供帮助:
- 这些方法接受任何类型的 RDD:https://github.com/apache/hbase/blob/master/hbase-spark/src/main/scala/org/apache/hadoop/hbase/spark/HBaseContext.scala#L290 ==>,因此您应该能够在
RDD[Sale]
上使用它 - bulkDelete 需要一个函数将
Sale
对象转换为 HBase 的Delete
对象 (https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Delete.html( Delete
对象表示要删除的行。您可以在此处获取删除对象初始化的示例:https://www.tutorialspoint.com/hbase/hbase_delete_data.htm- 根据要删除行的内容和方式,应将
Sales
的各个部分转换为字节。例如,您想通过行键删除数据,您应该将其提取并放入Delete
对象
中
据我了解bulkDelete
该方法将累积batchSize
数量的 Delete 对象并立即将它们发送到 HBase 中。否则,您能否展示一些代码以更具体地了解您要做什么?
执行val salesList: List[Sale] = salesObjects.collect().toList
不是一个好主意,因为它将所有数据引入驱动程序。它可能会导致 OOM 问题。