apache-spark - 如何在 Spark SQL 中使用分区发现
问题描述
给定 HDFS 中带有 parquet 文件的下一个结构:
data
├── name=Steve
└── name=Michael
在 SparkSQL 中,使用以下查询:
CREATE TABLE test USING parquet OPTIONS (path 'hdfs://namenode:8020/data')
分区未正确恢复且未检测到数据:
SELECT * FROM test LIMIT 1
+---+----+
|ID |name|
+---+----+
+---+----+
但是,还有另一种方法,即在创建表时指定架构,然后使用恢复分区执行更改表
CREATE TABLE test2(ID Int, name String) USING parquet OPTIONS (path 'hdfs://namenode:8020/data')
ALTER TABLE test2 RECOVER PARTITIONS
SELECT * FROM test2 LIMIT 1
+----+---------+
| ID | name |
+----+---------+
| 1 | Steve |
| 2 | Michael |
+----+---------+
Spark SQL 中是否还有其他替代方法可以在创建表且不指定架构时仅使用一个查询来使用分区发现?
解决方案
通过 spark sql 创建表后,例如:
CREATE TABLE test USING parquet OPTIONS (path 'hdfs://namenode:8020/data')
请记住在使用之前修复表:
MSCK REPAIR TABLE test
然后表的分区将被注册到 Metastore。否则该表将不会返回任何结果。如本在线文档所述:https ://docs.databricks.com/user-guide/tables.html
推荐阅读
- xml - 将 XML/XSD/WSDL 的混合转换为 java 类
- ios - Swift - 在加载时重命名 UILabel
- hl7-fhir - 我们可以更新 FHIR 中的捆绑包吗?
- azure - 使用 Azure 逻辑应用在 Azuresql 数据库中插入行
- ios - AWS Amplify Swift API 登录 iOS 移动应用程序
- android - 使用 ThreetenBp 解析 DateTime 会导致 DateTimeParseException 或不完整的字符串错误
- angular - 我的浮动标签没有按计划运行,已经尝试过不同的输入焦点但没有成功
- java - 如何计算txt文件中写入的字母数量
- spring-boot - Camel(Spring Boot)自定义日志
- php - 超全局变量的某些方面如何与 PHP 中的函数相关联?