Hadoop 如何从拼花文件中获取架构/列名?

Hadoop 如何从拼花文件中获取架构/列名?,hadoop,apache-pig,hdfs,parquet,Hadoop,Apache Pig,Hdfs,Parquet,我在HDFS中有一个文件存储为part-m-00000.gz.parquet 我试图运行hdfs dfs-text dir/part-m-00000.gz.parquet但是它被压缩了,所以我运行了gunzip part-m-00000.gz.parquet,但是它没有解压缩文件,因为它无法识别.parquet扩展名 如何获取此文件的架构/列名?您将无法使用hdfs dfs-text“打开”该文件,因为它不是文本文件。拼花地板文件写入磁盘的方式与文本文件非常不同 对于同样的问题,拼花项目提供了拼

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

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

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

您将无法使用hdfs dfs-text“打开”该文件,因为它不是文本文件。拼花地板文件写入磁盘的方式与文本文件非常不同

对于同样的问题,拼花项目提供了拼花工具来完成您正试图完成的任务。打开并查看模式、数据、元数据等

查看拼花工具项目(简单地说,它是一个jar文件)

另外,Cloudera对拼花地板的支持和贡献很大,它还有一个很好的页面,上面有关于拼花工具使用的示例。该页面中针对您的用例的示例如下

parquet-tools schema part-m-00000.parquet

签出Cloudera页面

因为它不是文本文件,所以不能对其执行“-text”操作。
即使您没有安装拼花工具,您也可以通过Hive轻松阅读它,前提是您可以将该文件加载到Hive表中。

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

HDFS

parquet工具模式hdfs://:8020//.parquet
S3

parquet工具模式s3:///.parquet

希望有帮助。

也许它可以使用桌面应用程序查看和其他二进制格式的数据,如和。它是纯Java应用程序,可以在Linux、Mac和Windows上运行。请查看详细信息

它支持复杂的数据类型,如数组、映射等

< P>使得获取不同语言的实木复合元数据很容易,包括C、C++、RISE、GO、java、JavaScript等。 下面是如何使用PyArrow(Python-apachearrow-API)获取模式:

导入pyarrow.parquet作为pq
表格=pq.读取表格(路径)
table.schema#pa.schema([pa.field(“movie”,“string”,False),pa.field(“release_year”,“int64”,True)])
有关如何使用PyArrow从拼花地板文件读取元数据信息的更多详细信息,请参阅

您还可以使用Spark获取拼花地板文件的模式

val df=spark.read.parquet('some_dir/'))
df.schema//返回一个StructType
StructType对象如下所示:

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

从StructType对象,可以推断拼花地板元数据中的列名、数据类型和可为空的属性。火花法不如箭头法干净。

如果使用Docker,也可以在容器中运行拼花工具:

docker run -ti -v C:\file.parquet:/tmp/file.parquet nathanhowell/parquet-tools schema /tmp/file.parquet
是拼花地板工具的轻质替代品

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

此工具将提供有关拼花地板文件的基本信息。

如果您使用的是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)
}

非常感谢。我希望-我目前的环境没有蜂巢,所以我只为先生准备了pig&hdfs。除非你知道拼花地板柱结构,否则你将无法在上面制作蜂巢桌。谢谢。听起来比我想象的要多得多!以下是。提供的github链接都不再有效:(支持多种语言,并使使用多种不同语言获取拼花地板模式变得容易。有关更多详细信息,请参阅我的答案。这对我很有用
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
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"