[英]How to read date, time and Timestamp from hbase column
我使用Phoenix在Hbase中创建下表。
CREATE TABLE test_Table
( test_date date not null,
CONSTRAINT PK_test PRIMARY KEY (test_date)
);
然后使用以下命令将一条记录插入相同的记录。
upsert into test_Table(test_date) values('2013-11-30');
我能够使用Hbase读取字符串,整型,浮点型和双精度数据类型值。 Hbase客户端API,但不包含日期类型。
我正在使用以下代码读取所有内容,但不确定如何从字节中读取日期。
import org.apache.spark._
import org.apache.spark.rdd._
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.DataFrame
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.Path
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.spark.HBaseContext
import org.apache.hadoop.hbase.client.Scan
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.sql.types._
import org.apache.hadoop.hbase.filter.PrefixFilter
import org.apache.hadoop.hbase.{ TableName, HBaseConfiguration }
import java.io.File
import java.text.SimpleDateFormat
def scanHBaseTable(tableName: String, sqlContext: SQLContext): Unit = {
@transient val conf = getHbaseConfiguration();
@transient var scan = new Scan()
//scan.setAllowPartialResults(Constants.ALLOW_HBASE_PARTIAL_SCAN)
//scan.setCaching(Constants.HBASE_SCAN_CACHE)
val hbaseContext = new HBaseContext(sqlContext.sparkContext, conf);
val hbaseRawRDD = hbaseContext.hbaseRDD(TableName.valueOf(tableName), scan)
hbaseRawRDD.foreach(v =>
{
println(Bytes.toString(v._1.get()))
println((new SimpleDateFormat("yyyy-MM-dd").parse(Bytes.toString(v._1.get()))))
})
println("Length: " + hbaseRawRDD.map(r => r._1.copyBytes()).collect().length);
}
有人可以为我提供解决方案吗?
v的类型是(ImmutableBytesWritable, Result)
因此您可以从Result
对象获取日期。 您可以使用result.getColumnLatestCell(family, qualifier).getTimestamp
。
我不知道Phoenix使用的是什么系列或限定词,您可以在表中列出所有值并知道它们使用的结构。 您可以使用方法Result.getMap
返回Map[Family, Map[Qualifier, Map[CreateTime, Value]]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.