【问题标题】:How to view Apache Parquet file in Windows?如何在 Windows 中查看 Apache Parquet 文件?
【发布时间】:2018-11-28 17:08:16
【问题描述】:

我找不到任何关于 Apache Parquet 文件的简单英文解释。如:

  1. 它们是什么?
  2. 我需要 Hadoop 或 HDFS 来查看/创建/存储它们吗?
  3. 如何创建镶木地板文件?
  4. 如何查看镶木地板文件?

感谢您对这些问题的任何帮助。

【问题讨论】:

标签: java .net parquet


【解决方案1】:

什么是 Apache Parquet?

Apache Parquet 是一种以列方式存储数据的二进制文件格式。 Parquet 文件中的数据类似于具有列和行的 RDBMS 样式表。但是,您通常一次访问一列,而不是一次访问一行数据。

Apache Parquet 是现代大数据存储格式之一。它有几个优点,其中一些是:

  • 列式存储:高效的数据检索、高效的压缩等...
  • 元数据位于文件末尾:允许从数据流生成 Parquet 文件。 (常见于大数据场景)
  • 所有 Apache 大数据产品都支持

我需要 Hadoop 还是 HDFS?

没有。 Parquet 文件可以存储在任何文件系统中,而不仅仅是 HDFS。如上所述,它是一种文件格式。因此,它就像任何其他具有名称和 .parquet 扩展名的文件一样。但是,在大数据环境中通常会发生的情况是,一个数据集将被拆分(或分区)为多个 parquet 文件以提高效率。

所有 Apache 大数据产品默认支持 Parquet 文件。这就是为什么它看起来只能存在于 Apache 生态系统中的原因。

如何创建/读取 Parquet 文件?

如前所述,当前所有 Apache 大数据产品,如 Hadoop、Hive、Spark 等,默认支持 Parquet 文件。

因此可以利用这些系统来生成或读取 Parquet 数据。但这远非实际。想象一下,为了读取或创建 CSV 文件,您必须安装 Hadoop/HDFS + Hive 并配置它们。幸运的是还有其他解决方案。

创建您自己的镶木地板文件:

查看 parquet 文件内容:

还有其他方法吗?

可能。但是存在的并不多,而且它们大多没有很好的记录。这是因为 Parquet 是一种非常复杂的文件格式(我什至找不到正式的定义)。我列出的那些是我在写这篇回复时唯一知道的那些

【讨论】:

  • 我在其他地方找不到有关 Parquet 文件的文件扩展名的任何信息。我想我会选择.parquet ;)
  • ParquetViewer 几乎无法打开我的任何文件。:(
  • @ShaharPrish 我会在 repo 中打开一个带有一些示例文件的问题单。
【解决方案2】:

现在可以通过Apache Arrow 实现这一点,这有助于简化不同数据格式之间的通信/传输,请参阅我的答案hereofficial docs(如果是Python)。

基本上,这让您可以像使用 DataFrame 一样的方式快速读取/写入 pandas 的 parquet 文件,让您享受使用 notebooks 来查看和处理此类文件的好处,就像普通的 csv 文件一样。

编辑:

例如,给定最新版本的Pandas,请确保已安装pyarrow

然后你可以简单地使用 pandas 来操作 parquet 文件:

import pandas as pd

# read
df = pd.read_parquet('myfile.parquet')

# write
df.to_parquet('my_newfile.parquet')

df.head()

【讨论】:

    【解决方案3】:

    除了@sal 的广泛回答之外,我在这种情况下还遇到了另一个问题:

    如何使用 SQL 访问 parquet 文件中的数据?

    由于我们仍处于 Windows 环境中,因此我知道的方法并不多。使用Spark 作为SQL 引擎,使用Python 作为Spark 的接口,可以获得最好的结果。不过,我认为Zeppelin 环境也可以正常工作,但我自己还没有尝试过。

    There is very well done guide by Michael Garlanyk指导大家安装Spark/Python组合。

    设置完成后,我可以通过以下方式与镶木地板互动:

    from os import walk
    from pyspark.sql import SQLContext
    
    sc = SparkContext.getOrCreate()
    sqlContext = SQLContext(sc)
    
    parquetdir = r'C:\PATH\TO\YOUR\PARQUET\FILES'
    
    # Getting all parquet files in a dir as spark contexts.
    # There might be more easy ways to access single parquets, but I had nested dirs
    dirpath, dirnames, filenames = next(walk(parquetdir), (None, [], []))
    
    # for each parquet file, i.e. table in our database, spark creates a tempview with
    # the respective table name equal the parquet filename
    print('New tables available: \n')
    
    for parquet in filenames:
        print(parquet[:-8])
        spark.read.parquet(parquetdir+'\\'+parquet).createOrReplaceTempView(parquet[:-8])
    

    一旦以这种方式加载您的镶木地板,您就可以与 Pyspark API 进行交互,例如通过:

    my_test_query = spark.sql("""
    select
      field1,
      field2
    from parquetfilename1
    where
      field1 = 'something'
    """)
    
    my_test_query.show()
    

    【讨论】:

      【解决方案4】:

      这个帖子可能为时已晚,只需为任何想要使用在 MAC 或 Linux 上运行的桌面应用程序查看 Parquet 文件的人做一些补充。
      有一个桌面应用程序可以查看Parquet 以及其他二进制格式数据,例如ORCAVRO。它是纯 Java 应用程序,因此可以在 Linux、Mac 和 Windows 上运行。详情请查看Bigdata File Viewer

      支持数组、地图等复杂数据类型

      【讨论】:

      • 我无法读取大文件(parquet 约 116MB),因为它拥有且文件未显示...
      • @DavideScicolone 感谢您的反馈,请问您能否在 git 存储库中提交问题并提供我们可以下载您无法打开的文件的位置?
      • 我在 GitHub 上创建了一个问题,因为我无法读取我的 parquet 文件:INT96 is not implemented 它们是从 pyspark 2.4.3 生成的文件
      【解决方案5】:

      这是一个快速“hack”,用于在 Windows 中使用 Python 显示 单表 parquet 文件(我使用 Anaconda Python):

      • 安装pyarrowhttps://pypi.org/project/pyarrow/

      • 安装pandasguihttps://pypi.org/project/pandasgui/

      • 创建这个简单的脚本parquet_viewer.py:

        import pandas as pd
        from pandasgui import show
        import sys
        import os
        
        dfs = {}
        for fn in sys.argv[1:]:
            dfs[os.path.basename(fn)] = pd.read_parquet(fn)
        show(**dfs)
        
      • 通过以管理员身份运行这些命令来关联 .parquet 文件扩展名(当然,您需要调整 Python 安装的路径):

        assoc .parquet=parquetfile
        ftype parquetfile="c:\Python3\python.exe" "\<path to>\parquet_viewer.py" "%1"
        

      这将允许打开以@Sal 的答案中的 .NET 查看器不支持的压缩格式(例如 Zstd)压缩的镶木地板文件。

      【讨论】:

        【解决方案6】:

        在 Mac 上,如果我们想查看内容,我们可以安装“parquet-tools”

        • brew install parquet-tools
        • parquet-tools 头文件名

        我们总是可以将 parquet 文件读取到 Spark 中的数据框并查看内容。

        它们是列格式,更适合分析环境,一次写入,多次读取。 Parquet 文件更适合读取密集型应用程序。

        【讨论】:

        • 感谢您的信息。确实值得一提的是 Parquet 文件是不可变的。因此,要对文件内容进行任何更改,需要创建一个全新的文件。所以写一次,读多次是最有意义的。尽管可以通过基于特定键将数据分区到单独的 parquet 文件来优化写入。
        【解决方案7】:

        此链接允许您查看小型镶木地板文件: http://parquet-viewer-online.com/

        它最初是由 Rodrigo Lozano 提交的。本站基于这里的github项目:https://github.com/elastacloud/parquet-dotnet

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-14
          • 1970-01-01
          • 2010-12-21
          • 2019-03-08
          • 1970-01-01
          • 2011-09-13
          • 1970-01-01
          相关资源
          最近更新 更多