Java Phoenix在大容量加载后显示存储在HBase中的空值而不是实值

Java Phoenix在大容量加载后显示存储在HBase中的空值而不是实值,java,apache-spark,bigdata,hbase,phoenix,Java,Apache Spark,Bigdata,Hbase,Phoenix,Phoenix显示空值,而不是存储在hbase中的实际值。在hbase中查询数据时,一切正常,所有值都正确。此外,计数操作显示phoenix中正确的行数。但当查询任何一行时,每一列的值都是null 对于加载数据,我使用了与此处相同的方法: 首先,我创建了phoenix表。然后我从spark数据集生成hfiles,将它们存储在某个临时存储器中,并将它们大量加载到hbase表中 它可以很好地与hbase配合使用,但在phoenix中,所有值都为null 要转换火花行值,我使用以下方法: if(字符

Phoenix显示空值,而不是存储在hbase中的实际值。在hbase中查询数据时,一切正常,所有值都正确。此外,计数操作显示phoenix中正确的行数。但当查询任何一行时,每一列的值都是null

对于加载数据,我使用了与此处相同的方法:

首先,我创建了phoenix表。然后我从spark数据集生成hfiles,将它们存储在某个临时存储器中,并将它们大量加载到hbase表中

它可以很好地与hbase配合使用,但在phoenix中,所有值都为null

要转换火花行值,我使用以下方法:

if(字符串的值实例){
返回PVarchar.INSTANCE.toBytes(值);
}else if(布尔值实例){
返回PBoolean.INSTANCE.toBytes(值);
}else if(双精度值实例){
返回PDouble.INSTANCE.toBytes(值);
}else if(浮点值实例){
返回PFloat.INSTANCE.toBytes(值);
}else if(值instanceof Long){
返回PLong.INSTANCE.toBytes(值);
}else if(整数的值实例){
返回PInteger.INSTANCE.toBytes(值);
}else if(短值实例){
返回PSmallint.INSTANCE.toBytes(值);
}else if(BigDecimal的值实例){
返回PDecimal.INSTANCE.toBytes(值);
}else if(日期的值实例){
返回PDate.INSTANCE.toBytes(值);
}else if(时间戳的值实例){
返回PTimestamp.INSTANCE.toBytes(值);
}

数据类型是否存在冲突?我曾经遇到过这样一个案例,我们将Phoenix列定义为整数,在写入数据时,HBase上加载了错误的数据。没有发现任何不一致之处。这很奇怪,因为对于任何一行,它都会为包括主键在内的所有列显示空值。出于好奇,您是否可以创建一个新视图(可能只包含该键和一个以上的列),然后看看它是如何出现的