从HBase批量删除记录 - 如何将RDD转换为数组[字节]?



我有一个想要从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 问题。

最新更新