如何在 Windows 中查看 Apache Parquet 文件?
Posted
技术标签:
【中文标题】如何在 Windows 中查看 Apache Parquet 文件?【英文标题】:How to view Apache Parquet file in Windows? 【发布时间】:2018-11-28 17:08:16 【问题描述】:我找不到任何关于 Apache Parquet 文件的简单英文解释。如:
-
它们是什么?
我需要 Hadoop 或 HDFS 来查看/创建/存储它们吗?
如何创建镶木地板文件?
如何查看镶木地板文件?
感谢您对这些问题的任何帮助。
【问题讨论】:
用于打开和查看 Parquet 文件的 Windows 实用程序:github.com/mukunku/ParquetViewer 【参考方案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 并配置它们。幸运的是还有其他解决方案。
创建您自己的镶木地板文件:
在 Java 中,请参阅我的以下帖子:Generate Parquet File using Java 在 .NET 中请查看以下库:parquet-dotnet查看 parquet 文件内容:
请尝试以下 Windows 实用程序:https://github.com/mukunku/ParquetViewer还有其他方法吗?
可能。但是存在的并不多,而且它们大多没有很好的记录。这是因为 Parquet 是一种非常复杂的文件格式(我什至找不到正式的定义)。我列出的那些是我在写这篇回复时唯一知道的那些
【讨论】:
我在其他地方找不到有关 Parquet 文件的文件扩展名的任何信息。我想我会选择.parquet
;)
ParquetViewer 几乎无法打开我的任何文件。:(
@ShaharPrish 我会在 repo 中打开一个带有一些示例文件的问题单。【参考方案2】:
现在可以通过Apache Arrow 实现这一点,这有助于简化不同数据格式之间的通信/传输,请参阅我的答案here 或official 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 以及其他二进制格式数据,例如ORC 和AVRO。它是纯 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):
安装pyarrow
包https://pypi.org/project/pyarrow/
安装pandasgui
包https://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
【讨论】:
以上是关于如何在 Windows 中查看 Apache Parquet 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Windows下面运行hadoop的MapReduce程序
如何在Windows下面运行hadoop的MapReduce程序