【问题标题】:Parquet without Hadoop?没有 Hadoop 的镶木地板?
【发布时间】:2015-05-30 13:15:19
【问题描述】:

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

【问题讨论】:

标签: hadoop hdfs parquet


【解决方案1】:

调查同样的问题,我发现目前显然不可能。 我发现了这个git issue,它建议将镶木地板与 hadoop api 分离。貌似还没做完。

在 Apache Jira 中,我找到了一个 issue,它要求提供一种在 hadoop 之外读取 parquet 文件的方法。在撰写本文时尚未解决。

编辑:

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

无需依赖hadoop即可轻松在java中读写parquet文件

【讨论】:

  • 这是2015年写的,2018年更新的,都2020年了,还是不开心。
【解决方案2】:

聚会迟到了,但我一直在努力让这成为可能:https://github.com/jmd1011/parquet-readers

这仍在开发中,但最终的实现应该会在撰写本文后的一两个月内完成。

编辑:几个月后,仍在努力!它正在积极开发中,只是花费的时间比预期的要长。

【讨论】:

    【解决方案3】:

    您在 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
      } 
    },
    

    【讨论】:

      【解决方案4】:

      现在您不需要像以前那样严重依赖 hadoop。

      请看我的另一篇帖子:How to view Apache Parquet file in Windows?

      【讨论】:

        【解决方案5】:

        由于它只是一种文件格式,显然可以将 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") 一样简单

        【讨论】:

          【解决方案6】:

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

          • 您可以使用 Apache Spark 访问它。
          • 如果您在 AWS 上,您可以 直接从 Redshift 或 Athena 加载或访问它
          • 如果您在 Azure,您可以从 SQL DataWarehouse 或 SQL 加载或访问它 服务器
          • 在 GCP 中也是如此

          【讨论】:

          • 所有这些解决方案都将使用 hadoop jars 来读取它。但他们将其抽象化并使其真正无痛
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-04
          • 1970-01-01
          • 2018-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-25
          相关资源
          最近更新 更多