java - 在 Java 中读取 ORC 文件

标签 java hadoop orc

如何用 Java 读取 ORC 文件?我想读入一个小文件以进行一些单元测试输出验证,但找不到解决方案。

最佳答案

最近遇到了这个并自己实现了一个

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();
        }

    }
}

关于java - 在 Java 中读取 ORC 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32712932/

相关文章:

lucene - 在 Hadoop 上运行 Lucene/Solr 的最佳方式是什么?

获取 YARN 运行应用程序使用的容器和 vcore 数量的 Python 命令

hadoop - 如何从 hdfs 符号链接(symbolic link)读取多个文本文件

scala - 在 Spark 中创建的数据之上创建 Hive 表

java - 除了底层操作系统之外,Java 是否对文件名施加了进一步的限制?

java - GWT。创建原始(不可引用)整数变量

java - 在Java中执行Java代码

java - 在 toString 中使用 equals 或 instanceof

hadoop - 在 s3n 上查询 Orc 文件非常慢

apache-spark - spark ORC微调(文件大小,条纹)