将 spark DataFrame 写入表
Posted
技术标签:
【中文标题】将 spark DataFrame 写入表【英文标题】:Write a spark DataFrame to a table 【发布时间】: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 表?
(我是大数据处理的新手,如果问题表述不当,请见谅)
【问题讨论】:
【参考方案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 之间的问题)。
【讨论】:
以上是关于将 spark DataFrame 写入表的主要内容,如果未能解决你的问题,请参考以下文章
Spark - 如何将约 20TB 的数据从 DataFrame 写入配置单元表或 hdfs?
将 Spark Dataframe 写入 HDP2.6 中的 Hive 可访问表
Spark操作dataFrame进行写入mysql,自定义sql的方式
将 Spark DataFrame 写入 Hive 表时的内存分配问题