我想在我的项目中使用Parquet作为列式存储。但是,我不想依赖于Hadoop/HDFS库。是否可以在HDFS之外使用Parquet?或者最小的依赖是什么?
调查同样的问题,我发现目前似乎不可能。
我找到了这个git问题,其中提出了将parquet与hadoop api分离的建议。显然,目前还没有实现。
在Apache Jira中,我找到了一个问题,询问在hadoop之外读取parquet文件的方法。截至撰写本文时仍未解决。
编辑:
现在已经不再在github上跟踪问题(上面的第一个链接已失效)。我找到了一个较新的问题,位于apache的Jira上,标题如下:
使java轻松读写parquet文件,而不依赖于hadoop
由于Parquet只是一种文件格式,因此可以将其从Hadoop生态系统中分离出来。目前我能找到的最简单的方法是通过Apache Arrow,有关Python示例,请参见此处。
下面是官方PyArrow文档的摘录:
写入
In [2]: import numpy as np
In [3]: import pandas as pd
In [4]: import pyarrow as pa
In [5]: df = pd.DataFrame({'one': [-1, np.nan, 2.5],
...: 'two': ['foo', 'bar', 'baz'],
...: 'three': [True, False, True]},
...: index=list('abc'))
...:
In [6]: table = pa.Table.from_pandas(df)
In [7]: import pyarrow.parquet as pq
In [8]: pq.write_table(table, 'example.parquet')
阅读
In [11]: pq.read_table('example.parquet', columns=['one', 'three'])
编辑:
使用Pandas直接处理
也可以直接使用Pandas读取和写入数据框。这使得操作变得非常简单,例如 my_df.to_parquet("myfile.parquet")
和 my_df = pd.read_parquet("myfile.parquet")
您不需要使用HDFS/Hadoop来消费Parquet文件。有不同的方法可以使用Parquet。
{
"type" : "file",
"enabled" : true,
"connection" : "file:///",
"workspaces" : {
"json_files" : {
"location" : "/incorta/tenants/demo//drill/json/",
"writable" : false,
"defaultInputFormat" : json
}
},