如何从镶木地板文件中获取架构/列名称?

How do I get schema / column names from parquet file?

我在 HDFS 中存储了一个文件 part-m-00000.gz.parquet

我试过 运行 hdfs dfs -text dir/part-m-00000.gz.parquet 但它被压缩了,所以我 运行 gunzip part-m-00000.gz.parquet 但它没有解压缩文件,因为它无法识别.parquet 扩展名。

如何获取此文件的架构/列名称?

您将无法 "open" 使用 hdfs dfs -text 的文件,因为它不是文本文件。与文本文件相比,Parquet 文件写入磁盘的方式非常不同。

同样,Parquet 项目提供了 parquet-tools 来执行您正在尝试执行的任务。打开并查看模式、数据、元数据等

检查 parquet-tool 项目(简单地说,一个 jar 文件。) parquet-tools

此外,支持 Parquet 并为 Parquet 做出重大贡献的 Cloudera 也有一个不错的页面,其中包含有关 parquet-tools 用法的示例。该页面中针对您的用例的示例是

parquet-tools schema part-m-00000.parquet

查看 Cloudera 页面。 Using the Parquet File Format with Impala, Hive, Pig, HBase, and MapReduce

由于它不是文本文件,因此您不能对其执行“-text”。 即使您没有安装 parquet-tools,您也可以通过 Hive 轻松阅读它,如果您可以将该文件加载到 Hive table.

如果你的 Parquet 文件像我一样位于 HDFS 或 S3 中,你可以尝试如下操作:

HDFS

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

希望对您有所帮助。

也许可以使用桌面应用程序查看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了解详情。

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

Apache Arrow 可以很容易地使用许多不同的语言获取 Parquet 元数据,包括 C、C++、Rust、Go、Java、JavaScript 等

以下是使用 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 文件读取元数据信息的更多详细信息,请参阅 here

您还可以使用 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 元数据中的列名称、数据类型和可为空 属性。 Spark 方法不如 Arrow 方法干净。

如果您使用 Docker,您还可以 运行 容器中的镶木地板工具:

docker run -ti -v C:\file.parquet:/tmp/file.parquet nathanhowell/parquet-tools schema /tmp/file.parquet

parquet-cli 是镶木地板工具的轻量级替代品。

pip install parquet-cli          //installs via pip
parq filename.parquet            //view meta data
parq filename.parquet --schema   //view the schema
parq filename.parquet --head 10  //view top n rows

此工具将提供有关 parquet 文件的基本信息。

如果您使用的是 R,arrow 库中存在的函数的以下包装函数将为您工作:

read_parquet_schema <- function (file, col_select = NULL, as_data_frame = TRUE, props = ParquetArrowReaderProperties$create(), 
                                 ...) 
{
  require(arrow)
  reader <- ParquetFileReader$create(file, props = props, ...)
  schema <- reader$GetSchema()
  names <- names(schema)
  return(names)
}

示例:

arrow::write_parquet(iris,"iris.parquet")
read_parquet_schema("iris.parquet")
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"