Hadoop 如何从拼花文件中获取架构/列名?
我在HDFS中有一个文件存储为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“打开”该文件,因为它不是文本文件。拼花地板文件写入磁盘的方式与文本文件非常不同 对于同样的问题,拼花项目提供了拼
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"