java寫parquet檔案
開啟ParquetWriter或者ParquetReader發現大部分構造方法都是過時的(@Deprecated),經過仔細的百度,和讀原始碼,才發現原來建立ParquetWriter物件採用內部類Builder來build();
例項:(Apache parquet1.9.0)本次寫入檔案,沒有儲存到hdfs如果需要儲存到hdfs,則需要配置hdfs配置檔案。
所需jar包:/** * 建立日期: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(); } }
相關推薦
java寫parquet檔案
開啟ParquetWriter或者ParquetReader發現大部分構造方法都是過時的(@Deprecated),經過仔細的百度,和讀原始碼,才發現原來建立ParquetWriter物件採用內部類Builder來build(); 例項:(Apach
JAVA寫CSV檔案
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
java 讀寫Parquet格式的數據 Parquet example
readline byte ble print 三種 每一個 sta cep edr import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io
java 讀寫json檔案
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 ----------------------------------------------