![](/img/trans.png)
[英]How to write RDD[List[(ImmutableBytesWritable, Put)] to HBase using saveAsNewAPIHadoopDataset
[英]Creating an RDD[(ImmutableBytesWritable, Result)] in Scala
我正在進行單元測試,需要在其中創建RDD[(ImmutableBytesWritable, Result)]
。 數據僅包含唯一id
和非唯一value
列。
我可以創建使用從列表中數據幀toDF
,並將其轉變成RDD[Row]
; 但是我在將其映射到RDD[(ImmutableBytesWritable, Result)]
遇到了麻煩。
val values = List((1, 1234), (2, 123), (3, 1234))
import spark.implicits._
val df = values.toDF("id", "value")
val counts : RDD[(ImmutableBytesWritable, Result)] = df.rdd.map(
row => (new ImmutableBytesWritable(), Result.create(...))
)
謝謝!
我不使用HBase,但是鑒於您要構建的簽名,我想到了這一點。 試試看。
我使用CellUtil創建了一個Cell以構建Result。
import org.apache.hadoop.hbase.{Cell, CellUtil}
import scala.collection.JavaConversions._
import scala.collection.mutable.ListBuffer
import scala.math.BigInt
import org.apache.spark._
import org.apache.spark.rdd._
import org.apache.spark.sql._
import org.apache.hadoop.hbase.client.Result
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
object Practice extends App {
val sparkConfig = new SparkConf().setAppName("test").setMaster("local[*]")
val ss = SparkSession.builder().config(sparkConfig).getOrCreate()
val values = Seq((1, 1234), (2, 123), (3, 1234))
import ss.implicits._
val df = values.toDF("id", "value")
val counts: RDD[(ImmutableBytesWritable, Result)] = df.rdd.map{ row =>
val key = row.getAs[Int]("id")
val keyByteArray = BigInt(key).toByteArray
val ibw = new ImmutableBytesWritable()
ibw.set(keyByteArray)
val value = row.getAs[Int]("value")
val valueByteArray = BigInt(value).toByteArray
val cellList = List(CellUtil.createCell(valueByteArray))
val cell: java.util.List[Cell] = ListBuffer(cellList: _*)
val result = Result.create(cell)
(ibw, result)
}
}
打印結果並不能表示一個好的答案,它可以為您提供:
KeyValue(03,keyvalues={\x04\xD2//LATEST_TIMESTAMP/Maximum/vlen=0/seqid=0})
KeyValue(01,keyvalues={\x04\xD2//LATEST_TIMESTAMP/Maximum/vlen=0/seqid=0})
KeyValue(02,keyvalues={{//LATEST_TIMESTAMP/Maximum/vlen=0/seqid=0})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.