我在处理从 Hbase 表接收的数据时遇到困难。我有一个 Hbase 表EMP_META: COLUMN_NAME,SALARY,DESIGNATION,BONUS
,我使用以下代码读取它:
def main(args: Array[String]): Unit = {
val sc = new SparkContext("local", "hbase-test")
println("Running Phoenix Context")
val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, "EMP_META")
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])
println("--------------: "+hBaseRDD.first())
}
但是,当我使用上面的打印语句打印它时,我得到以下输出:
(65 6d 70 6c 6f 79 65 65,keyvalues={employee/0:COLUMN_NAME/1483975443911/Put/vlen=4/seqid=0, employee/0:DATA_TYPE/1483975443911/Put/vlen=7/seqid=0, employee/0:_0/1483975443911/Put/vlen=1/seqid=0})
而不是简单的数据文本行。我想将输出转换为数据帧,以便可以轻松处理数据。有人可以帮我吗?谢谢
如果要将hbaseRDD转换为DataFrame,可以使用以下代码:
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
hBaseRDD.toDF
如果要将结果转换为字符串,则应将数组[字节]转换为字符串。存储在HBase中的数据是数组[字节]。尝试使用 Bytes.toString(data) 来转换它。