获取excel保存到hbase中

首页 » HBase » 获取excel保存到hbase中
如何创建 HBase

com.util.HBaseUtil类封装了对应的创建 Hbase表方法 createTable

示例如下:

  1. HBaseUtil.createTable("t_shared_bicycle", "info");//创建拥有一个列族的info的表t_shared_bicycle,一个列族可拥有任意数量的列。
获取本地文件

可以通过类加载器加载共享单车数据文件 dataResources.xls

  1. InputStream resourceAsStream = SaveData.class.getClassLoader().getResourceAsStream("dataResources.xls");
如何存储到 HBase

com.util.HBaseUtil类封装了对应的批量存储到 Hbase表方法 putByTable。示例如下:

List<Put> puts = new ArrayList<>();// 一个PUT代表一行数据,每个Put有唯一的ROWKEY
Put put = new Put(Bytes.toBytes("33404951")); //创建ROWKEY为33404951的PUT
byte[] family = Bytes.toBytes("info");
put.addColumn(family,Bytes.toBytes("bicycleId"), Bytes.toBytes(String.valueOf(5996)));//在列族info中,增加字段名称为bicycleId,值为5996的元素
put.addColumn(family,Bytes.toBytes("departure"), Bytes.toBytes("韩庄村北782米"));//在列族info中,增加字段名称为departure,值为韩庄村北782米的元素
puts.add(put);
HBaseUtil.putByTable("t_shared_bicycle",puts);//批量保存数据到t_shared_bicycle

测试:

  1. 创建拥有列族 info的表 t_shared_bicycle
  2. 将唯一骑行 trip_id设为表的 ROWKEY
  3. 出发地 = 目的地或者 目的地 = 所在城市的无效数据清除;
  4. 把文件 dataResources.xls中相应的数据存到 Hbaset_shared_bicycle中。

dataResources.xls文件格式如下:

trip_id开始时间结束时间车辆id出发地目的地所在城市开始经度开始纬度结束经度结束纬度
334049517/1/2017 0:097/1/2017 0:455996韩庄村北782米韩庄村北782米河北省保定市雄县39.043732116.26013939.043732116.260139
334049507/1/2017 0:117/1/2017 0:455777河北省保定市雄县G45(大广高速)乡里乡情铁锅炖东499米河北省保定市雄县39.044159116.25157939.04652116.237411
334049477/1/2017 1:597/1/2017 2:126342韩庄村北782米韩庄村北782米河北省保定市雄县39.043732116.26013939.043732116.260139

t_shared_bicycle表结构如下

列族名称字段对应的文件的描述ROWKEY (格式为:骑行 id
infobeginTime开始时间trip_id
infoendTime结束时间trip_id
infobicycleId车辆 idtrip_id
infodeparture出发地trip_id
infodestination目的地trip_id
infocity所在城市trip_id
infostart_longitude开始经度trip_id
infostop_longitude结束经度trip_id
infostart_latitude开始纬度trip_id
infostop_latitude结束纬度trip_id

代码如下:

import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

/* 
* 读取共享单车城市行车数据
* 
*/
public class SaveData {
    public static void SaveBicycleData()  throws Exception {
       HBaseUtil.createTable("t_shared_bicycle", "info");
        InputStream resourceAsStream = SaveData.class.getClassLoader().getResourceAsStream("dataResources.xls");
        Workbook workbook = WorkbookFactory.create(resourceAsStream);
        Sheet sheet = workbook.getSheetAt(0);
        int rows = sheet.getPhysicalNumberOfRows();
        List<Put> puts = new ArrayList<Put>();
        for (int n = 1; n < rows; n++) {
            // 通过异常方式清除格式不准确、数据不存在的无效行
            try {
                Row row = sheet.getRow(n);
                // 唯一骑行id,当作行rowkey
                DecimalFormat formatter1 = new DecimalFormat("########");
                String trip_id = formatter1.format(row.getCell(0).getNumericCellValue());
                Put put = new Put(Bytes.toBytes(trip_id));
                byte[] family = Bytes.toBytes("info");
                // 开始时间
                FastDateFormat instance = FastDateFormat.getInstance("MM/dd/yyyy HH:mm");
                String beginTimeValue = row.getCell(1).getStringCellValue();
                Date parse = instance.parse(beginTimeValue);
                put.addColumn(family, Bytes.toBytes("beginTime"), Bytes.toBytes(String.valueOf(parse.getTime())));
                // 结束时间
                String endTimeValue = row.getCell(2).getStringCellValue();
                Date parse2 = instance.parse(endTimeValue);
                put.addColumn(family, Bytes.toBytes("endTime"), Bytes.toBytes(String.valueOf(parse2.getTime())));
                // 单车识别码
                int bicycleId = (int)row.getCell(3).getNumericCellValue();
                put.addColumn(family, Bytes.toBytes("bicycleId"), Bytes.toBytes(String.valueOf(bicycleId)));
                // 出发地
                String departure = row.getCell(4).getStringCellValue();
                put.addColumn(family, Bytes.toBytes("departure"), Bytes.toBytes(departure));
                // 目的地
                String destination = row.getCell(5).getStringCellValue();
                put.addColumn(family, Bytes.toBytes("destination"), Bytes.toBytes(destination));
                // 所在城市
                String city = row.getCell(6).getStringCellValue();
                put.addColumn(family, Bytes.toBytes("city"), Bytes.toBytes(city));
                // 清除目的地 = 所在城市 或者 出发地 = 目的地 的无效数据
                if (destination.equals(city)|| departure.equals(destination) ) {
                    continue;
                }
                //开始经度
                DecimalFormat formatter2 = new DecimalFormat("###.######");
                String start_longitude = formatter2.format(row.getCell(7).getNumericCellValue());
                put.addColumn(family, Bytes.toBytes("start_longitude"), Bytes.toBytes(String.valueOf(start_longitude)));
                //开始纬度
                String start_latitude = formatter2.format(row.getCell(8).getNumericCellValue());
                put.addColumn(family, Bytes.toBytes("start_latitude"), Bytes.toBytes(String.valueOf(start_latitude)));
                //结束经度
                String stop_longitude = formatter2.format(row.getCell(9).getNumericCellValue());
                put.addColumn(family, Bytes.toBytes("stop_longitude"), Bytes.toBytes(String.valueOf(stop_longitude)));
                //结束纬度
                String stop_latitude = formatter2.format(row.getCell(10).getNumericCellValue());
                put.addColumn(family, Bytes.toBytes("stop_latitude"), Bytes.toBytes(String.valueOf(stop_latitude)));
                puts.add(put);
            } catch (Exception e) {
            }
        }
        HBaseUtil.putByTable("t_shared_bicycle", puts);
    }
}

 

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

 



觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00