如何从parquet文件中获取架构/列名?

bxgwgixi  于 2021-06-02  发布在  Hadoop
关注(0)|答案(5)|浏览(814)

我有一个文件存储在hdfs中作为 part-m-00000.gz.parquet 我试过逃跑 hdfs dfs -text dir/part-m-00000.gz.parquet 但它被压缩了,所以我跑了 gunzip part-m-00000.gz.parquet 但它不会解压缩文件,因为它无法识别 .parquet 分机。
如何获取此文件的架构/列名?

wsewodh2

wsewodh21#

因为它不是文本文件,所以不能对它执行“-text”。即使没有安装Parquet工具,也可以通过配置单元轻松地读取它,前提是可以将该文件加载到配置单元表中。

xnifntxz

xnifntxz2#

也许它能够使用桌面应用程序来查看Parquet地板和其他二进制格式的数据,如orc和avro。它是纯java应用程序,因此可以在linux、mac和windows上运行。有关详细信息,请查看bigdata文件查看器。
它支持数组、Map等复杂数据类型。

rslzwgfq

rslzwgfq3#

您将无法使用hdfs dfs-text“打开”该文件,因为它不是文本文件。Parquet文件写入磁盘的方式与文本文件非常不同。
同样,parquet项目也提供了parquet工具来执行您正在尝试执行的任务。打开并查看模式、数据、元数据等。
查看parquet工具项目(简单地说,就是一个jar文件)
此外,cloudera支持和贡献很大的Parquet,也有一个很好的Parquet工具使用的例子页面。该页面中针对您的用例的一个示例是

parquet-tools schema part-m-00000.parquet

checkout cloudera页面。将Parquet文件格式与impala、hive、pig、hbase和mapreduce一起使用

2fjabf4q

2fjabf4q4#

apachearrow使用许多不同的语言(包括c、c++、rust、go、java、javascript等)很容易获得parquet元数据。
下面介绍如何使用pyarrow(python-apache-arrow api)获取模式:

import pyarrow.parquet as pq

table = pq.read_table(path)
table.schema # pa.schema([pa.field("movie", "string", False), pa.field("release_year", "int64", True)])

有关如何使用pyarrow从Parquet文件读取元数据信息的更多详细信息,请参见此处。
您还可以使用spark获取Parquet文件的模式。

val df = spark.read.parquet('some_dir/')
df.schema // returns a StructType

structtype对象如下所示:

StructType(
  StructField(number,IntegerType,true),
  StructField(word,StringType,true)
)

从structtype对象,可以推断parquet元数据中的列名、数据类型和可为null的属性。Spark进近没有箭头进近干净。

eagi6jfj

eagi6jfj5#

如果您的Parquet文件像我一样位于hdfs或s3中,您可以尝试以下操作:
高密度光纤

parquet-tools schema hdfs://<YOUR_NAME_NODE_IP>:8020/<YOUR_FILE_PATH>/<YOUR_FILE>.parquet

s3级

parquet-tools schema s3://<YOUR_BUCKET_PATH>/<YOUR_FILE>.parquet

希望有帮助。

相关问题