不使用Hadoop如何使用Parquet?

31

我想在我的项目中使用Parquet作为列式存储。但是,我不想依赖于Hadoop/HDFS库。是否可以在HDFS之外使用Parquet?或者最小的依赖是什么?


现在这是完全可能的:https://dev59.com/eVUL5IYBdhLWcg3wDUW2#50933430 - Sal
6个回答

17

调查同样的问题,我发现目前似乎不可能。

我找到了这个git问题,其中提出了将parquet与hadoop api分离的建议。显然,目前还没有实现。

在Apache Jira中,我找到了一个问题,询问在hadoop之外读取parquet文件的方法。截至撰写本文时仍未解决。

编辑:

现在已经不再在github上跟踪问题(上面的第一个链接已失效)。我找到了一个较新的问题,位于apache的Jira上,标题如下:

使java轻松读写parquet文件,而不依赖于hadoop


3
这段话是在表达一件事情:作者在2015年写下了这句话,并在2018年进行了更新,但到2020年时仍未见到希望的结果。 - markthegrea

11

由于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")


4

您不需要使用HDFS/Hadoop来消费Parquet文件。有不同的方法可以使用Parquet。

  • 您可以使用Apache Spark来访问它。
  • 如果您在AWS上,您可以直接从Redshift或Athena加载或访问它。
  • 如果您在Azure上,您可以从SQL DataWarehouse或SQL Server加载或访问它。
  • 类似地,在GCP中也是这样。

5
所有这些解决方案都将使用Hadoop JAR文件来读取它。但是它们会将其抽象化并使其变得非常简单易懂。 - dre-hh

3
晚来了,但我一直在研究一些东西,这样应该可以实现:https://github.com/jmd1011/parquet-readers。 这仍在开发中,但最终实现应该会在本文撰写后的一个月或两个月内发布。
编辑:几个月过去了,我仍在努力! 它正在积极开发中,只是需要更长时间。

2
你在Parquet中有什么类型的数据?读取Parquet文件不需要HDFS,这绝对不是前提条件。我们在Incorta使用Parquet文件作为我们的暂存表,但我们没有依赖于HDFS,如果你想的话,你可以将文件存储在HDFS上。显然,我们在Incorta可以直接从Parquet文件中读取,但你也可以使用Apache Drill进行连接,使用file:///作为连接而不是hdfs:///。下面是一个例子。
要读取或写入Parquet数据,你需要在存储插件格式定义中包含Parquet格式。dfs插件定义包括Parquet格式。
{
  "type" : "file",
  "enabled" : true,
  "connection" : "file:///",
  "workspaces" : {
  "json_files" : {
  "location" : "/incorta/tenants/demo//drill/json/",
  "writable" : false,
  "defaultInputFormat" : json
  } 
},

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接