如何从命令行或 spark shell 显示 parquet 文件的方案(包括类型)?

How to show the scheme (including type) of a parquet file from command line or spark shell?

我已经确定了如何使用 spark-shell 来显示字段名称,但它很丑而且不包括类型

val sqlContext = new org.apache.spark.sql.SQLContext(sc)

println(sqlContext.parquetFile(path))

打印:

ParquetTableScan [cust_id#114,blar_field#115,blar_field2#116], (ParquetRelation /blar/blar), None

好的,我想我有一个可行的方法,只需查看第一行即可推断出方案。 (虽然不确定这有多优雅,如果它恰好是空的怎么办?我相信一定有更好的解决方案)

sqlContext.parquetFile(p).first()

在某些时候打印:

{
  optional binary cust_id;
  optional binary blar;
  optional double foo;
}
 fileSchema: message schema {
  optional binary cust_id;
  optional binary blar;
  optional double foo;
}

parquetFile() 的结果是具有 .printSchema() 方法的 SchemaRDD (1.2) 或 DataFrame (1.3)。

你应该可以做到这一点:

sqlContext.read.parquet(path).printSchema()

来自Spark docs

// Print the schema in a tree format
df.printSchema()
// root
// |-- age: long (nullable = true)
// |-- name: string (nullable = true)