没有 Hadoop 的镶木地板?
Parquet without Hadoop?
我想在我的一个项目中使用 parquet 作为列式存储。但我不想依赖 hadoop/hdfs 库。是否可以在 hdfs 之外使用镶木地板?或者最小依赖性是多少?
调查同样的问题我发现目前显然是不可能的。
我发现了这个 git issue,它建议将 parquet 从 hadoop api 中分离出来。显然还没有完成。
在 Apache Jira 中,我发现了一个 issue,它要求提供一种在 hadoop 之外读取 parquet 文件的方法。在撰写本文时尚未解决。
编辑:
不再在 github 上跟踪问题(上面的第一个 link 已死)。我发现一个较新的问题位于 apache's Jira 上,标题如下:
make it easy to read and write parquet files in java without depending on hadoop
聚会迟到了,但我一直在努力使这成为可能:https://github.com/jmd1011/parquet-readers。
这仍在开发中,但最终的实现应该会在写完这篇文章后的一两个月内完成。
编辑:几个月后,仍在努力!它正在积极开发中,只是花费的时间比预期的要长。
您在 Parquet 中有什么类型的数据?您不需要 HDFS 来读取 Parquet 文件。这绝对不是先决条件。我们在 Incorta 将镶木地板文件用于临时表。我们不依赖于 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
}
},
现在你不需要像以前那样严重依赖 hadoop。
请看我的另一篇post:
由于它只是一种文件格式,因此显然可以将 parquet 从 Hadoop 生态系统中分离出来。现在我能找到的最简单的方法是通过 Apache Arrow,请参阅 here 以获取 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 的方法。
- 您可以使用 Apache Spark 访问它。
- 如果你在 AWS 上,你可以
直接从 Redshift 或 Athena 加载或访问它
- 如果你在
Azure,您可以从 SQL DataWarehouse 或 SQL 加载或访问它
服务器
- 在 GCP 中也类似
我想在我的一个项目中使用 parquet 作为列式存储。但我不想依赖 hadoop/hdfs 库。是否可以在 hdfs 之外使用镶木地板?或者最小依赖性是多少?
调查同样的问题我发现目前显然是不可能的。 我发现了这个 git issue,它建议将 parquet 从 hadoop api 中分离出来。显然还没有完成。
在 Apache Jira 中,我发现了一个 issue,它要求提供一种在 hadoop 之外读取 parquet 文件的方法。在撰写本文时尚未解决。
编辑:
不再在 github 上跟踪问题(上面的第一个 link 已死)。我发现一个较新的问题位于 apache's Jira 上,标题如下:
make it easy to read and write parquet files in java without depending on hadoop
聚会迟到了,但我一直在努力使这成为可能:https://github.com/jmd1011/parquet-readers。
这仍在开发中,但最终的实现应该会在写完这篇文章后的一两个月内完成。
编辑:几个月后,仍在努力!它正在积极开发中,只是花费的时间比预期的要长。
您在 Parquet 中有什么类型的数据?您不需要 HDFS 来读取 Parquet 文件。这绝对不是先决条件。我们在 Incorta 将镶木地板文件用于临时表。我们不依赖于 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
}
},
现在你不需要像以前那样严重依赖 hadoop。
请看我的另一篇post:
由于它只是一种文件格式,因此显然可以将 parquet 从 Hadoop 生态系统中分离出来。现在我能找到的最简单的方法是通过 Apache Arrow,请参阅 here 以获取 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 的方法。
- 您可以使用 Apache Spark 访问它。
- 如果你在 AWS 上,你可以 直接从 Redshift 或 Athena 加载或访问它
- 如果你在 Azure,您可以从 SQL DataWarehouse 或 SQL 加载或访问它 服务器
- 在 GCP 中也类似