java 读写Parquet格式的数据 Parquet example

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Random;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.log4j.Logger;
import org.apache.parquet.example.data.Group;
import org.apache.parquet.example.data.GroupFactory;
import org.apache.parquet.example.data.simple.SimpleGroupFactory;
import org.apache.parquet.hadoop.ParquetReader;
import org.apache.parquet.hadoop.ParquetReader.Builder;
import org.apache.parquet.hadoop.ParquetWriter;
import org.apache.parquet.hadoop.example.GroupReadSupport;
import org.apache.parquet.hadoop.example.GroupWriteSupport;
import org.apache.parquet.schema.MessageType;
import org.apache.parquet.schema.MessageTypeParser;

public class ReadParquet {
    static Logger logger=Logger.getLogger(ReadParquet.class);
    public static void main(String[] args) throws Exception {

//        parquetWriter("test\\parquet-out2","input.txt");
        parquetReaderV2("test\\parquet-out2");
    }

    static void parquetReaderV2(String inPath) throws Exception{
        GroupReadSupport readSupport = new GroupReadSupport();
        Builder<Group> reader= ParquetReader.builder(readSupport, new Path(inPath));
        ParquetReader<Group> build=reader.build();
        Group line=null;
        while((line=build.read())!=null){
            System.out.println(line.toString());
        }
        System.out.println("读取结束");

    }
    //新版本中new ParquetReader()所有构造方法好像都弃用了,用上面的builder去构造对象
    static void parquetReader(String inPath) throws Exception{
        GroupReadSupport readSupport = new GroupReadSupport();
        ParquetReader<Group> reader = new ParquetReader<Group>(new Path(inPath),readSupport);
        Group line=null;
        while((line=reader.read())!=null){
            System.out.println(line.toString());
        }
        System.out.println("读取结束");

    }
    /**
     *
     * @param outPath  输出Parquet格式
     * @param inPath  输入普通文本文件
     * @throws IOException
     */
    static void parquetWriter(String outPath,String inPath) throws IOException{
        MessageType schema = MessageTypeParser.parseMessageType("message Pair {\n" +
                " required binary city (UTF8);\n" +
                " required binary ip (UTF8);\n" +
                " repeated group time {\n"+
                  " required int32 ttl;\n"+
                  " required binary ttl2;\n"+
                "}\n"+
              "}");
        GroupFactory factory = new SimpleGroupFactory(schema);
        Path path = new Path(outPath);
       Configuration configuration = new Configuration();
       GroupWriteSupport writeSupport = new GroupWriteSupport();
       writeSupport.setSchema(schema,configuration);
       ParquetWriter<Group> writer = new ParquetWriter<Group>(path,configuration,writeSupport);    //把本地文件读取进去,用来生成parquet格式文件
       BufferedReader br =new BufferedReader(new FileReader(new File(inPath)));
       String line="";
       Random r=new Random();
       while((line=br.readLine())!=null){
           String[] strs=line.split("\\s+");
           if(strs.length==2) {
               Group group = factory.newGroup()
                       .append("city",strs[0])
                       .append("ip",strs[1]);
               Group tmpG =group.addGroup("time");
               tmpG.append("ttl", r.nextInt(9)+1);
               tmpG.append("ttl2", r.nextInt(9)+"_a");
               writer.write(group);
           }
       }
       System.out.println("write end");
       writer.close();
    }
}
说下schema(写Parquet格式数据需要schema,读取的话"自动识别"了schema)
/*
 * 每一个字段有三个属性:重复数、数据类型和字段名,重复数可以是以下三种:
 *         required(出现1次)
 *         repeated(出现0次或多次)
 *         optional(出现0次或1次)
 * 每一个字段的数据类型可以分成两种:
 *         group(复杂类型)
 *         primitive(基本类型) * 数据类型有 * INT64, INT32, BOOLEAN, BINARY, FLOAT, DOUBLE, INT96, FIXED_LEN_BYTE_ARRAY */

maven依赖(我用的1.7)
<dependency>
    <groupId>org.apache.parquet</groupId>
    <artifactId>parquet-hadoop</artifactId>
    <version>1.7.0</version>
</dependency>
时间: 2024-10-29 19:09:48

java 读写Parquet格式的数据 Parquet example的相关文章

Android读写JSON格式的数据之JsonWriter和JsonReader

最近的好几个月都没有搞Android编程了,逐渐的都忘却了一些东西.最近打算找一份Android的工作,要继续拾起以前的东西.公司月初搬家之后就一直没有网络,直到今日公司才有网络接入,各部门才开始办公.不说这些了,下面开始今天的正文. JSON格式的数据通常用于网络传输,尤其是在移动设备上与服务端进行数据交互.JSON与XML比较有明显的优势.XML格式的数据非常臃肿,传递少量的数据就要附带很多额外的格式数据.而JSON除了少量的符号外,全部是真正的数据,所以有越来越多的程序用JSON来取代XM

Java读写Excel文件中数据的简便方法

Java开发项目中经常会碰到处理Excel文件中数据的情况,这里通过一个例子来看一下实现方法:从Excel文件orders.xls中读取订单信息,从中找出2010年1月1日(含)之后,并且SELLERID等于18的订单.找到的数据写入order_result.xls文件. Excel文件orders.xls的内容如下: ORDERID CLIENT SELLERID AMOUNT ORDERDATE 1 UJRNP 17 392 2008/11/2 15:28 2 SJCH 6 4802 200

NFC技术:读写非NDEF格式的数据

1 //向nfc标签读写MifareUltraligh格式的数据 2 public class MainActivity extends Activity { 3 private CheckBox mwriteData; 4 private NfcAdapter mNfcAdapter; 5 private PendingIntent mPendingIntent; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState

RC ORC Parquet 格式比较和性能测试

RC ORC Parquet 格式比较和性能测试 作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 为什么要比较这三者 为什么要比较,起因是为了提高Hadoop集群的存储和计算效率,尤其是离线Hive作业的效率,为什么比较的是这三者,是因为三者是目前Hive离线作业中正在大规模使用或可能大规模使用的三种主流的相对成熟的文件格式 对于ORC性能的评测,Hortonworks发过一

JAVA操作JSON格式数据

由于近些日子公司在弄微信项目,而微信官方API所提供的接口当中,有些需要以POST方式进行请求,且数据传输格式要求为JSON格式数据,之前没怎么研究过,而且传递的数据格式相对也比较简单,所以直接都是采用的字符串拼接的方式进行组装的,之后再用String.format格式化一下就好了. //需要提交的json数据 String jsonData = "{\"openid\":\"%s\",\"to_groupid\":%d}";

PHP、Java输出json格式数据

  PHP 输出json. $result = mysql_query($sql); //查询结果 $users=array(); $i=0; while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ $users[$i]=$row; $i++; } echo json_encode(array("result"=>"success",'data'=>$users));   防止输出json数据乱码,把数据转

13、NFC技术:读写非NDEF格式的数据

MifareUltralight数据格式 将NFC标签的存储区域分为16个页,每一个页可以存储4个字节,一个可存储64个字节(512位).页码从0开始(0至15).前4页(0至3)存储了NFC标签相关的信息(如NFC标签的序列号.控制位等).从第5页开始存储实际的数据(4至15页). 读写MifareUltralight数据 使用MifareUltralight.get方法获取MifareUltralight对象,然后调用MifareUltralight.connect方法进行连接,并使用Mif

JAVA用geotools读写shape格式文件

转自:http://toplchx.iteye.com/blog/1335007 JAVA用geotools读写shape格式文件 (对应geotools版本:2.7.2) (后面添加对应geotools 10.0版本的写法) 读shape文件. shape格式文件最少包含3个文件,他们的后缀是:.shp, .dbf, .shx. .shp存储地理形状和位置信息,.dbf存储属性信息,.shx是索引文件. 单独读取DBF文件 public void readDBF(String path) {

java 解析json格式数据(转)

2012-07-30 16:43:54|  分类: java |  标签:java  json  |举报|字号 订阅 有时候我们可能会用到json格式的数据进行数据的传输,那么我们怎么把接收到的数据解析出来呢?   下面有两种方法: 1.通过谷歌的Gson来进行解析: json数据:sTotalString = {"message":"success","result":[{"surveyid":"1",&