天天看點

Apache ORC深度探索(下篇)

作者:阿福Chris

上篇文章我們探索了Apache ORC的發展史、目前Hadoop适配情況以及支援的資料類型。今天我們來看一下如何使用Apache ORC。

三、在Hive中使用

Hive可以說是ORC格式及程度最好的軟體了。下面讓我們看看如何在Hive裡面使用ORC和一些相關的配置。

Apache ORC深度探索(下篇)

Hive中的文法

在Hive裡面,如果您是建立表,那麼隻需要在表後增加“STORED AS ORC”語句即可。例如下面的表:istari。

CREATE TABLE istari (
  name STRING,
  color STRING
) STORED AS ORC;
           

如果要對現有的表或者表分區修改格式為ORC,可以直接使用ALTER文法,格式如下:

ALTER TABLE istari SET FILEFORMAT ORC;
           

另外,從Hive 0.14開始,使用者可以通過使用CONCATENATE指令文法來手動合并ORC小檔案。執行該指令後,不必重新序列化檔案就能在類型級别進行合并。以下是文法參考:

ALTER TABLE istari [PARTITION partition_spec] CONCATENATE;
           

如果想要擷取ORC檔案資訊,可以使用Hive的orcfiledump指令。如下:

% hive --orcfiledump <path_to_file>
           

從Hive 1.1開始,指令增加了-d參數。如下:

% hive --orcfiledump -d <path_to_file>
           

四、在Python中使用

Apache ORC深度探索(下篇)

在Python開發中,如果要使用ORC,可以使用Apache Arrow項目的PyArrow包,或者Dask包,以下是如何安裝這兩個包并展示一個使用例子:

PyArrow包安裝和使用

安裝文法:

pip3 install pyarrow==7.0.0
pip3 install pandas
           

讀寫ORC檔案的例子:

In [1]: import pandas as pd

In [2]: import pyarrow as pa

In [3]: from pyarrow import orc

In [4]: orc.write_table(pa.table({"col1": [1, 2, 3]}), "test.orc")

In [5]: orc.read_table("test.orc").to_pandas()
Out[5]:
   col1
0     1
1     2
2     3
           

Dask包安裝和使用

pip3 install "dask[dataframe]==2022.2.0"
pip3 install pandas
           

讀寫ORC檔案:

In [1]: import pandas as pd

In [2]: import dask.dataframe as dd

In [3]: pf = pd.DataFrame(data={"col1": [1, 2, 3]})

In [4]: dd.to_orc(dd.from_pandas(pf, npartitions=2), path="/tmp/orc")
Out[4]: (None,)

In [5]: dd.read_orc(path="/tmp/orc").compute()
Out[5]:
   col1
0     1
1     2
2     3
           

五、在Spark中的使用

Apache Spark對ORC的內建也很好,下面就讓我們看看在Spark裡面如何使用ORC和一些相關的配置吧。

Apache ORC深度探索(下篇)

Spark中的文法

在Spark的建表語句中,你可以少寫幾個字母,隻需要在語句最後增加USING ORC即可:

CREATE TABLE istari (
  name STRING,
  color STRING
) USING ORC;
           

如果想擷取ORC檔案的資訊,可以使用orc-tools指令,如下:

% orc-tools meta <path_to_file>
           

如果要現實ORC檔案的資料,使用如下指令:

% orc-tools data <path_to_file>