簡體   English   中英

在Scala中創建RDD [(ImmutableBytesWritable,Result)]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM