1. 程式人生 > >java寫parquet檔案

java寫parquet檔案

           開啟ParquetWriter或者ParquetReader發現大部分構造方法都是過時的(@Deprecated),經過仔細的百度,和讀原始碼,才發現原來建立ParquetWriter物件採用內部類Builder來build();


例項:(Apache parquet1.9.0)本次寫入檔案,沒有儲存到hdfs如果需要儲存到hdfs,則需要配置hdfs配置檔案。

/**
 * 建立日期:2017-8-2
 * 包路徑:org.meter.parquet.TestParquetWriter.java
 * 建立者:meter
 * 描述:
 * 版權:[email protected]
by meter ! */ package org.meter.parquet; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.parquet.column.ParquetProperties; import org.apache.parquet.example.data.Group; import org.apache.parquet.example.data.simple.SimpleGroup; import org.apache.parquet.example.data.simple.SimpleGroupFactory; import org.apache.parquet.format.converter.ParquetMetadataConverter; import org.apache.parquet.hadoop.ParquetFileReader; import org.apache.parquet.hadoop.ParquetFileWriter; import org.apache.parquet.hadoop.ParquetReader; import org.apache.parquet.hadoop.ParquetWriter; import org.apache.parquet.hadoop.api.ReadSupport; import org.apache.parquet.hadoop.example.ExampleParquetWriter; import org.apache.parquet.hadoop.example.GroupReadSupport; import org.apache.parquet.hadoop.metadata.CompressionCodecName; import org.apache.parquet.hadoop.metadata.ParquetMetadata; import org.apache.parquet.schema.MessageType; import org.apache.parquet.schema.MessageTypeParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author meter * 檔名:TestParquetWriter * @描述: */ public class TestParquetWriter { private static Logger logger = LoggerFactory .getLogger(TestParquetWriter.class); private static String schemaStr = "message schema {" + "optional int64 log_id;" + "optional binary idc_id;" + "optional int64 house_id;" + "optional int64 src_ip_long;" + "optional int64 dest_ip_long;" + "optional int64 src_port;" + "optional int64 dest_port;" + "optional int32 protocol_type;" + "optional binary url64;" + "optional binary access_time;}"; static MessageType schema =MessageTypeParser.parseMessageType(schemaStr); /** * 建立時間:2017-8-3 * 建立者:meter * 返回值型別:void * @描述:輸出MessageType */ public static void testParseSchema(){ logger.info(schema.toString()); } /** * 建立時間:2017-8-3 * 建立者:meter * 返回值型別:void * @描述:獲取parquet的Schema * @throws Exception */ public static void testGetSchema() throws Exception { Configuration configuration = new Configuration(); // windows 下測試入庫impala需要這個配置 System.setProperty("hadoop.home.dir", "E:\\mvtech\\software\\hadoop-common-2.2.0-bin-master"); ParquetMetadata readFooter = null; Path parquetFilePath = new Path("file:///E:/mvtech/work/isms_develop/src/org/meter/parquet/2017-08-02-10_91014_DPI0801201708021031_470000.parq"); readFooter = ParquetFileReader.readFooter(configuration, parquetFilePath, ParquetMetadataConverter.NO_FILTER); MessageType schema =readFooter.getFileMetaData().getSchema(); logger.info(schema.toString()); } /** * 建立時間:2017-8-3 * 建立者:meter * 返回值型別:void * @描述:測試寫parquet檔案 * @throws IOException */ private static void testParquetWriter() throws IOException { Path file = new Path( "file:///C:\\Users\\meir\\Desktop\\linuxtetdir\\logtxt\\test.parq"); ExampleParquetWriter.Builder builder = ExampleParquetWriter .builder(file).withWriteMode(ParquetFileWriter.Mode.CREATE) .withWriterVersion(ParquetProperties.WriterVersion.PARQUET_1_0) .withCompressionCodec(CompressionCodecName.SNAPPY) //.withConf(configuration) .withType(schema); /* * file, new GroupWriteSupport(), CompressionCodecName.SNAPPY, 256 * * 1024 * 1024, 1 * 1024 * 1024, 512, true, false, * ParquetProperties.WriterVersion.PARQUET_1_0, conf */ ParquetWriter<Group> writer = builder.build(); SimpleGroupFactory groupFactory = new SimpleGroupFactory(schema); String[] access_log = { "111111", "22222", "33333", "44444", "55555", "666666", "777777", "888888", "999999", "101010" }; for(int i=0;i<1000;i++){ writer.write(groupFactory.newGroup() .append("log_id", Long.parseLong(access_log[0])) .append("idc_id", access_log[1]) .append("house_id", Long.parseLong(access_log[2])) .append("src_ip_long", Long.parseLong(access_log[3])) .append("dest_ip_long", Long.parseLong(access_log[4])) .append("src_port", Long.parseLong(access_log[5])) .append("dest_port", Long.parseLong(access_log[6])) .append("protocol_type", Integer.parseInt(access_log[7])) .append("url64", access_log[8]) .append("access_time", access_log[9])); } writer.close(); } /** * 建立時間:2017-8-3 * 建立者:meter * 返回值型別:void * @throws IOException * @描述:測試讀parquet檔案 */ private static void testParquetReader() throws IOException{ Path file = new Path( "file:///C:\\Users\\meir\\Desktop\\linuxtetdir\\logtxt\\test.parq"); ParquetReader.Builder<Group> builder = ParquetReader.builder(new GroupReadSupport(), file); ParquetReader<Group> reader = builder.build(); SimpleGroup group =(SimpleGroup) reader.read(); logger.info("schema:"+group.getType().toString()); logger.info("idc_id:"+group.getString(1, 0)); } /** * 建立時間:2017-8-2 建立者:meter 返回值型別:void * * @描述: * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //testGetSchema(); //testParseSchema(); //testParquetWriter(); testParquetReader(); } }
所需jar包:



相關推薦

javaparquet檔案

           開啟ParquetWriter或者ParquetReader發現大部分構造方法都是過時的(@Deprecated),經過仔細的百度,和讀原始碼,才發現原來建立ParquetWriter物件採用內部類Builder來build(); 例項:(Apach

JAVACSV檔案

        CSV是以逗號間隔的文字檔案,其檔案以純文字形式儲存表格資料(數字和文字)。         在JAVA中可以通過輸出檔案流的方式將資料寫入CSV檔案。         首先定義一個物件類 public class Person { private St

java解析Parquet檔案

 獲取 Parquet檔案,解析為LIst<String> package com.emcc.hiacloud.analytics.common.util; import com.alibaba.fastjson.JSONArray; import com.a

javaParquet格式的數據 Parquet example

readline byte ble print 三種 每一個 sta cep edr import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io

javajson檔案

json檔案放在maven工程的resource 的html 檔案下面 package com.dl.utils; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUt

python spark中parquet檔案到hdfs,同時避免太多的小檔案(block小檔案合併)

    在pyspark中,使用資料框的檔案寫出函式write.parquet經常會生成太多的小檔案,例如申請了100個block,而每個block中的結果 只有幾百K,這在機器學習演算法的結果輸出中經常出現,這是一種很大的資源浪費,那麼如何同時避免太多的小檔案(bloc

Java:使用DOM4j來實現讀XML檔案中的屬性和元素

DOM4可以讀取和新增XML檔案的屬性或者元素 讀取屬性: public static void ReadAttributes() throws DocumentException { File file = new File("D:\\cmz\\java\\XMLTest\\Custom

Java:簡單的讀XML檔案之使用DOM4J讀

Dom4J方式解析XML檔案。dom4j是非官方提供的xml檔案解析方式,因此需要去第三方下載dom4j的jar包 File file = new File("D:\\chengmuzhe\\java\\JavaOOP6.0\\students.xml"); SAXReader reader = n

java實現讀伺服器檔案

https://github.com/MAXIAODONGS/Remote-operation-of-static-resources 這個主要實現java遠端訪問伺服器的讀寫檔案操作,自動登入讀寫檔案,以上程式碼整理來自網際網路,然後自己將很多瑣碎的東西整理在了一起 pom.xml要配置

java 日誌到檔案

//日誌檔案 String path = System.getProperty("user.dir");//獲取專案絕對路徑 String logPath = path + "\\run.log"; java.util.logging.

java數字影象處理基礎使用imageio影象檔案示例(轉載)

一個BufferedImage的畫素資料儲存在Raster中,ColorModel裡面儲存顏色空間,型別等資訊,當前Java只支援一下三種影象格式- JPG,PNG,GIF,如何向讓Java支援其它格式,首先要 完成Java中的影象讀寫介面,然後打成jar,加上啟動引數- Xbootclasspat

java指定編碼的按行讀txt檔案(幾種讀方式的比較)

輸入輸出的幾種形式 1.FileReader,FileWriter File r = new File("temp.txt") FileReader f = new FileReader(name);//讀取檔案name BufferedReader b = new Buf

Java學習——讀txt檔案

package HHH; import java.io.*; import static java.lang.System.out; public class OpenFile { public static void main(String[] args) {

Java hdfs檔案或者目錄

1.讀取單個檔案     [java] view plain copy Date date = DateUtil.getSpecifiedDayBefore();   String&

java 按位元組讀二進位制檔案(Base64編碼解碼)

最近在做專案時遇到這樣一個需求:依次讀取本地資料夾裡所有檔案的內容,轉為JSON,傳送到ActiveMQ的訊息佇列, 然後從MQ的訊息佇列上獲取檔案的資訊,依次寫到本地。常見的檔案型別,比如.txt 和.png等檔案的讀寫並不難。但是,我剛才所提到的需求,如果用常規的方法去讀寫,比如按位元組讀取檔案內容

Android/Java 讀、MP3檔案ID3V1資訊

MP3的歌曲資訊一般分兩個大版本,分別是ID3V1和ID3V2,其中V2又分為好幾個版本,具體百度一下,下方的程式碼僅僅是支援ID3V1。 需要用到的一個輔助工具(juniversalchardet)用於解決亂碼問題,具體看部落格:https://my.oschina.net/u/1462828

java怎麼把字串檔案裡去

String s = "akjibuvuvu"; FileWriter fw = null; File f = new File("a.txt"); try { if(!f.exists()){ f.createNewFile(); } fw = new FileWriter

java IO 讀檔案 檔案

今天,線上出了一點問題,需要通過檢視日誌才能解決。最終,也的確是通過檢視日誌解決了問題。接著就需要對日誌檔案進行過濾,查詢日誌檔案中我們想要的資料,然後存入庫中。 於是寫了一個簡單的讀寫檔案操作。日後再使用的時候,我就不再去寫了,直接copy就好了。方便的記錄一下: /**

java檔案、匯出效率問題以及下載問題

首先比較常用的輸出流方法分為兩大類:OutputStream類和Writer類,分別有FileOutputStream、BufferedOutputStream、FileWriter和BufferedWriter。 通過以上兩篇文章我們可以發現,FileWri

Java實現CSV檔案操作

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------