【问题标题】:Unable to directly load hive parquet table using spark dataframe无法使用 spark 数据框直接加载 hive parquet 表
【发布时间】:2018-01-31 04:38:04
【问题描述】:

我浏览了 SO 中的相关帖子,但在互联网上的任何地方都找不到这个特定问题。

我正在尝试加载 Hive 表(Hive 外部表指向 parquet 文件),但 spark 数据框无法读取数据,它只能读取模式。但是对于同一个 hive 表,我可以从 hive shell 查询。当我尝试将配置单元表加载到数据框中时,它没有返回任何数据。下面是我的脚本和 DDL。我正在使用 Spark 2.1(Mapr 分发版)

无法从 hive 表中读取数据有来自 spark 的底层 parquet 文件

val df4 = spark.sql("select * from default.Tablename")
scala> df4.show()
+----------------------+------------------------+----------+---+-------------+-------------+---------+
|col1           |col2           |col3                       |key            |col4|  record_status|source_cd|
+----------------------+------------------------+----------+---+-------------+-------------+---------+
+----------------------+------------------------+----------+---+-------------+-------------+---------+

Hive DDL
CREATE EXTERNAL TABLE `Tablename`(
  `col1` string,
  `col2` string,
  `col3` decimal(19,0),
  `key` string,
  `col6` string,
  `record_status` string,
  `source_cd` string)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
  'path'='maprfs:abc/bds/dbname.db/Tablename')
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  'maprfs:/Datalocation/Tablename'
TBLPROPERTIES (
  'numFiles'='2',
  'spark.sql.sources.provider'='parquet',
  'spark.sql.sources.schema.numParts'='1',
  'spark.sql.sources.schema.part.0'='{\"type\":\"struct\",\"fields\":[{\"name\":\"col1\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"col2\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"col3\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"key\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"col6\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"record_status\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"source_cd\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}}]}',
  'totalSize'='68216',
  'transient_lastDdlTime'='1502904476')

【问题讨论】:

    标签: apache-spark apache-spark-sql spark-dataframe hiveql


    【解决方案1】:

    删除 'spark.sql.sources.provider'='镶木地板' 你会成功的

    【讨论】:

    • 是的,解决了问题并且工作正常。非常感谢。
    • 能否请您详细说明如何删除此属性?
    • 此属性在我的 ddl(创建表语句)中,我已删除此行并修复了该问题。如果您在从 hive 访问 parquet 文件时遇到任何问题,请随时告诉我。
    猜你喜欢
    • 1970-01-01
    • 2019-07-09
    • 2018-01-23
    • 2018-11-21
    • 2018-02-19
    • 2019-01-31
    • 2021-05-13
    • 2020-11-09
    • 2016-03-22
    相关资源
    最近更新 更多