PySpark SQL动态加载最新日期分区Delta表无结果问题求助
问题排查与修复
你的代码存在几个关键问题,导致无法加载数据:
1. 日期格式不匹配
你的分区日期格式是日-月-年(比如04-02-2024),但代码中用%Y-%m-%d生成的是年-月-日格式,两者完全不匹配,导致找不到对应分区。
2. 路径转义错误
Python字符串中\是转义字符,你写的first\merchant会被解析成错误的路径,应该用正斜杠/或者双反斜杠\\。
3. 变量名与拼写错误
- 你定义的表名变量是
tableName,但SQL格式化时用的是table,变量名不匹配; - Spark SQL的方法是
spark.sql(),你写成了spark.sqk(),拼写错误。
修正后的代码
from datetime import datetime # 生成与分区一致的日-月-年格式日期 a = datetime.today().strftime('%d-%m-%Y') print(a) # 用正斜杠拼接路径,避免转义问题 tableName = "delta.`first/merchant/loaddate={}`".format(a) # 调用正确的spark.sql方法,使用正确的变量名 df = spark.sql( ''' select * from {0} '''.format(tableName) ) df.show()
更优方案(推荐)
不需要硬编码分区路径,直接通过SQL过滤分区字段,让Spark自动读取最新分区,这样更灵活且不易出错:
from datetime import datetime # 生成匹配的日期字符串 latest_date = datetime.today().strftime('%d-%m-%Y') df = spark.sql( ''' select * from delta.`first/merchant` where loaddate = '{0}' '''.format(latest_date) ) df.show()
内容的提问来源于stack exchange,提问作者Fernando Martinez
相关产品推荐
相关产品推荐

