Hbase的Join问题

好好学习天天向下 2013-04-05 04:02:13
有2张表
TBA
ROWKEY:datetime_userid
TBB
ROWKEY:userid //帐号id
cf:username//用户帐号

只对TBA的ROWKEY进行SCAN
但返回数据时,希望得到datetime_username的数据结构
请教各位高手,求个高效的join算法
...全文
526 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 tntzbzc 的回复:
hbase做JOIN比较麻烦 如果SCAN出来的数据不多可以参考RDBMS的Merge方法 我的思路: 1、定义一个String array对象 TBA_ARR 2、把SCAN TBA的数据扔进TBA_ARR 同时翻转数据结构:datetime_userid => userid_datetime 3、对TBA_ARR排序,并且获取所有不重复的user……
好方案,谢谢你,我先找几个同事一起消化消化
撸大湿 2013-04-07
  • 打赏
  • 举报
回复
hbase做JOIN比较麻烦 如果SCAN出来的数据不多可以参考RDBMS的Merge方法 我的思路: 1、定义一个String array对象 TBA_ARR 2、把SCAN TBA的数据扔进TBA_ARR 同时翻转数据结构:datetime_userid => userid_datetime 3、对TBA_ARR排序,并且获取所有不重复的userid 放进一个新的String array对象TBB_ARR 同时,把TBB_ARR中的userid扔进List<Get> sget
List<Get> sget = new ArrayList<Get>();
		String LastUserID = "";
		String[] UserID = new String[RowKeyA.length];
		ScanCount = 0;
		for (int i = 0; i < RowKeyA.length; i++) {
			if (LastUserID.equals(RowKeyA[i].split("_")[0]))
				continue;
			LastUserID = RowKeyA[i].split("_")[0];
			sget.add(new Get((LastUserID).getBytes()));
			UserID[ScanCount] = LastUserID;
			ScanCount++;
		}
4、通过HTable.get(List<get>arg0)方法,一次性获取所有TBB中的数据,并放到TBB_ARR中 5、由于TBA_ARR和TBB_ARR都是按字典顺序排序的,所以最后只要用一次轮循,就能把两个数组的数据拼接起来 如果SCAN的数据非常庞大,需要做很多逻辑分析的话,建议用MapReduce+Hbase
  • 打赏
  • 举报
回复
有人嘛? 自己顶顶

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧