我有一个要从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]
作为参数。 Sale是一个复杂的对象,因此将每个字段解析为字节会很成问题。
目前,我已经将RDD[Sale]
转换为val salesList: List[Sale] = salesObjects.collect().toList
,但目前仍在继续下一步。
答案 0 :(得分:1)
我从未使用过这种方法,但会尽力提供帮助:
RDD[Sale]
上使用它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问题。