没有hadoop的Parquet地板?

djp7away  于 2021-05-30  发布在  Hadoop
关注(0)|答案(6)|浏览(416)

我想在我的一个项目中使用 parquet 作为柱状存储。但是我不想依赖hadoop/hdfs libs。是否可以在hdfs之外使用 parquet ?或者最小依赖是什么?

wvmv3b1j

wvmv3b1j1#

现在你不需要像以前那样依赖hadoop了。
请看我的另一篇文章:如何在windows中查看apacheparquet文件?

r7s23pms

r7s23pms2#

因为它只是一种文件格式,所以很明显可以将parquet与hadoop生态系统解耦。现在我能找到的最简单的方法是通过apachearrow,参见这里的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读写Dataframe。这就简单到 my_df.to_parquet("myfile.parquet") 以及 my_df = pd.read_parquet("myfile.parquet")

doinxwow

doinxwow3#

去派对晚了,但我一直在做一些事情让这成为可能:https://github.com/jmd1011/parquet-readers.
这仍在开发中,但最终的实现应该在撰写本文后的一两个月内完成。
编辑:几个月后,仍然在做这个!它正在积极开发中,只是时间比预期的要长。

bnl4lu3b

bnl4lu3b4#

Parquet地板有什么数据?您不需要hdfs来读取Parquet文件。这绝对不是先决条件。我们在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
  } 
},
tcomlyy6

tcomlyy65#

调查同一个问题,我发现目前显然不可能。我发现了这个git问题,它建议将parquet与hadoopapi分离。显然还没有完成。
在apachejira中,我发现了一个问题,它要求在hadoop之外读取Parquet文件。到写这篇文章的时候还没有解决。
编辑:
问题不再在github上跟踪(上面的第一个链接已经失效)。我发现的一个新问题位于apache的jira上,标题如下:
在不依赖hadoop的情况下,可以轻松地在java中读写Parquet文件

w51jfk4q

w51jfk4q6#

使用parquet文件不需要hdfs/hadoop。有不同的方式消费Parquet地板。
您可以使用apachespark访问它。
如果你在aws上,你可以直接从redshift或athena加载或访问它
如果您在azure上,则可以从sql数据仓库或sql server加载或访问它
同样在gcp中也是如此

相关问题