我正在尝试读取hbase表中的所有记录。下面是代码片段。
SparkContext sparkContext = new SparkContext(conf);
SQLContext sqlContext = new SQLContext(sparkContext);
Configuration hbaseConf = HBaseConfiguration.create();
hbaseConf.set("hbase.master", "localhost:60000");
hbaseConf.setInt("timeout", 120000);
hbaseConf.set("hbase.zookeeper.quorum", "localhost");
hbaseConf.set("zookeeper.znode.parent", "/hbase-unsecure");
hbaseConf.set(TableInputFormat.INPUT_TABLE, "Test");
DataFrame df = sqlContext.createDataFrame(sparkContext.newAPIHadoopRDD(hbaseConf, TableInputFormat.class, ImmutableBytesWritable.class, Result.class), TestBean.class);
df.registerTempTable("TempTest");
df.show();
在 df.show()
我在犯错误 java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
任何提示,为什么我要面对这个问题。
1条答案
按热度按时间brccelvz1#
您正尝试从由以下数据对组成的rdd创建Dataframe:
您需要阅读您的hbaserdd:
然后将(immutablebyteswritable,result)元组转换为result的rdd:
然后将行转换为rdd,这些行可以转换为Dataframe。
作为一个示例,我们假设您有一个带有键的hbase表,该键包含两个值“value1\u value2”,您可以使用以下方法解析该键(由“\u”指定):
现在,您可以创建一个Dataframe,其中的值在“\”分隔键中:
为了将hbase表完全Map到Dataframe,您需要:
创建case类:(在对象外部)
将列族定义为字节:
分析结果:
创建Dataframe