如何查看 Windows 中的 Apache Parquet 文件?

How to view Apache Parquet file in Windows?

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

  1. 它们是什么?
  2. 我需要 Hadoop 或 HDFS 来 view/create/store 它们吗?
  3. 如何创建 parquet 文件?
  4. 如何查看 parquet 文件?

感谢任何有关这些问题的帮助。

什么是 Apache Parquet?

Apache Parquet 是一种二进制文件格式,以柱状方式存储数据。 Parquet 文件中的数据类似于 RDBMS 样式 table,其中包含列和行。但是,您通常不会一次访问一行数据,而是一次访问一列数据。

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

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

我需要 Hadoop 还是 HDFS?

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

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

如何 create/read Parquet 文件?

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

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

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

  • 在Java请看我的关注post:
  • 在 .NET 中请参阅以下库:parquet-dotnet

查看镶木地板文件内容:

还有其他方法吗?

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

除了@sal 的广泛回答之外,我在这方面还遇到了一个问题:

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

由于我们仍处于 Windows 上下文中,我知道的方法不多。使用 Spark as the SQL engine with Python as interface to Spark. However, I assume that the 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()

在 Python 的情况下,现在可以通过 Apache Arrow, which helps to simplify communication/transfer between different data formats, see my answer or the official docs 实现。

基本上,这使您可以像时尚一样以 pandas DataFrame 的方式快速读取/写入 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()

对于这个线程来说可能为时已晚,只是为想要使用桌面应用程序 运行 在 MAC 或 Linux.[=18= 上查看 Parquet 文件的任何人做一些补充] 有桌面应用查看Parquet and also other binary format data like ORC and AVRO. It's pure Java application so that can be run at Linux, Mac and also Windows. Please check Bigdata File Viewer了解详情。

支持数组、映射等复杂数据类型

在 Mac 如果我们想查看我们可以安装的内容 'parquet-tools'

  • brew 安装镶木地板工具
  • parquet-tools 头文件名

我们始终可以将 parquet 文件读取到 Spark 中的数据帧并查看内容。

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

这里有一个快速的“黑客”来显示单个table镶木地板文件使用Windows中的Python(我使用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)压缩的镶木地板文件。

此 link 允许您查看小的 parquet 文件: http://parquet-viewer-online.com/

最初由 Rodrigo Lozano 提交。此站点基于此处的 github 项目:https://github.com/elastacloud/parquet-dotnet