在 pyspark 中读取 Hive 托管表的 orc 文件
Posted
技术标签:
【中文标题】在 pyspark 中读取 Hive 托管表的 orc 文件【英文标题】:Reading orc file of Hive managed tables in pyspark 【发布时间】:2019-12-09 09:11:49 【问题描述】:我正在尝试使用以下 pyspark 代码读取托管配置单元表的 orc 文件。
spark.read.format('orc').load('hive managed table path')
当我在获取的数据帧上执行打印模式时,如下所示
root
|-- operation: integer (nullable = true)
|-- originalTransaction: long (nullable = true)
|-- bucket: integer (nullable = true)
|-- rowId: long (nullable = true)
|-- currentTransaction: long (nullable = true)
|-- row: struct (nullable = true)
| |-- col1: float (nullable = true)
| |-- col2: integer (nullable = true)
|-- partition_by_column: date (nullable = true)
现在我无法解析这些数据并对数据框进行任何操作。在应用 show() 之类的操作时,我收到一条错误消息
java.lang.IllegalArgumentException: Include vector the wrong length
有人遇到过同样的问题吗?如果是,请您建议如何解决它。
【问题讨论】:
select(df.row.col1)
这行得通吗?在那种情况下,我猜你可以用它来压平它。
我试过了,df.select("row.col1").show(),得到同样的错误
【参考方案1】:
这是一个已知的issue。
您收到该错误是因为您尝试读取 Hive ACID
表,但 Spark 仍然不支持此操作。
也许您可以将 Hive 表导出为普通的 ORC
文件,然后使用 Spark 读取它们或尝试使用 Hive JDBC
等替代方法,如 here 所述
【讨论】:
【参考方案2】:由于我不确定版本您可以尝试其他方式来加载 ORC 文件。
使用 SqlContext
val df = sqlContext.read.format("orc").load(orcfile)
或
val df= spark.read.option("inferSchema", true).orc("filepath")
或 SparkSql(推荐)
import spark.sql
sql("SELECT * FROM table_name").show()
【讨论】:
我已经尝试了以上两种方法,在执行操作时得到了指定的错误。 您使用的是哪个 spark 版本? spark 版本 2.3.2.3.1.0.0-78 python 版本 2.7.5以上是关于在 pyspark 中读取 Hive 托管表的 orc 文件的主要内容,如果未能解决你的问题,请参考以下文章
pyspark读取textfile形成DataFrame以及查询表的属性信息
在 HIVE 中使用 CDH 5.4 和 Spark 1.3.0 和 Parquet 表的 PySpark 中的 Parquet 错误
在 Hive-S3 表的情况下,pyspark 命令行中的错误
在 HDInsight 4.0 中创建群集期间更改 Hive 托管表的默认路径