【问题标题】:Write a spark DataFrame to a table将 spark DataFrame 写入表
【发布时间】:2020-12-22 07:27:26
【问题描述】:
我正在尝试理解名为 saveAsTable 的 spark DataFrame API 方法。
我有以下问题
- 如果我只是使用 saveAsTable API 编写一个数据帧
df7.write.saveAsTable("t1"),(假设 t1 之前不存在),新创建的表是否会是一个 hive 表,可以使用 Hive QL 在 spark 外部读取?
- spark 是否还会创建一些非 Hive 表(使用 saveAsTable API 创建但无法使用 HiveQL 在 spark 外部读取)?
- 如何检查一个表是 Hive 表还是非 Hive 表?
(我是大数据处理的新手,如果问题表述不当,请见谅)
【问题讨论】:
标签:
apache-spark
hive
apache-spark-sql
【解决方案1】:
是的。新创建的表将是 hive 表,可以从 Hive CLI 查询(仅当 DataFrame 是从单个输入 HDFS 路径创建的,即从非分区的单个输入 HDFS 路径创建时)。
以下是DataFrameWriter.scala 类中的文档注释。 Documentation link
当 DataFrame 从非分区创建时
HadoopFsRelation 具有单个输入路径,以及数据源
provider 可以映射到现有的 Hive 内置 SerDe(即 ORC 和
Parquet),表以 Hive 兼容的格式保存,这
意味着其他系统(如 Hive)将能够读取此表。
否则,表将以 Spark SQL 特定格式保存。
【解决方案2】:
是的,你可以做到。您的表可以按列分区,但不能使用分桶(这是 spark 和 hive 之间的问题)。