2015-09-22 2 views
4

Как вы читаете ORC-файл в Java? Я хочу прочитать в небольшом файле для некоторой проверки выходного теста, но я не могу найти решение.Чтение файла ORC в Java

ответ

9

Наткнулся это и реализуется один я недавно

import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.hive.ql.io.orc.OrcFile; 
import org.apache.hadoop.hive.ql.io.orc.Reader; 
import org.apache.hadoop.hive.ql.io.orc.RecordReader; 

import org.apache.hadoop.hive.serde2.objectinspector.StructField; 
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; 

import java.util.List; 

public class OrcFileDirectReaderExample { 
    public static void main(String[] argv) 
    { 
     try { 
      Reader reader = OrcFile.createReader(HdfsFactory.getFileSystem(), new Path("/user/hadoop/000000_0")); 
      StructObjectInspector inspector = (StructObjectInspector)reader.getObjectInspector(); 
      System.out.println(reader.getMetadata()); 
      RecordReader records = reader.rows(); 
      Object row = null; 
      //These objects are the metadata for each column. They give you the type of each column and can parse it unless you 
      //want to parse each column yourself 
      List fields = inspector.getAllStructFieldRefs(); 
      for(int i = 0; i < fields.size(); ++i) { 
       System.out.print(((StructField)fields.get(i)).getFieldObjectInspector().getTypeName() + '\t'); 
      } 

      while(records.hasNext()) 
      { 
       row = records.next(row); 
       List value_lst = inspector.getStructFieldsDataAsList(row); 
       StringBuilder builder = new StringBuilder(); 
       //iterate over the fields 
       //Also fields can be null if a null was passed as the input field when processing wrote this file 
       for(Object field : value_lst) { 
        if(field != null) 
         builder.append(field.toString()); 
        builder.append('\t'); 
       } 
       //this writes out the row as it would be if this were a Text tab seperated file 
       System.out.println(builder.toString()); 
      } 
     }catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 
} 
+0

Это спасло меня! Отлично! – FisherCoder

0

Согласно Apache Wiki, формат файла ORC был введен в Hive 0.11.

Таким образом, вам понадобятся пакеты Hive в исходном пути проекта для чтения файлов ORC. Пакет для того же являются

org.apache.hadoop.hive.ql.io.orc.Reader; 
org.apache.hadoop.hive.ql.io.orc.OrcFile 
+0

Я попытался реализации решения с использованием они уже, но не имели большой удачи. –

-1

Попробуйте для получения ORCFile сверку ...

private long getRowCount(FileSystem fs, String fName) throws Exception { 
    long tempCount = 0; 
    Reader rdr = OrcFile.createReader(fs, new Path(fName)); 
    StructObjectInspector insp = (StructObjectInspector) rdr.getObjectInspector(); 
    Iterable<StripeInformation> iterable = rdr.getStripes(); 
    for(StripeInformation stripe:iterable){ 
     tempCount = tempCount + stripe.getNumberOfRows(); 
    } 
    return tempCount; 
} 

//fName is hdfs path to file. 
long rowCount = getRowCount(fs,fName); 
+0

Можете ли вы упомянуть об импорте, внешних библиотеках? Только одну функцию трудно повторно использовать, если они не упомянуты. –