我正在进行单元测试,我需要创建一个RDD [(ImmutableBytesWritable,Result)]。数据仅包含唯一ID和非唯一值列。
我可以从List创建一个DataFrame ……
我不使用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})