Microsoft Fabric预览版Notebook会话中Lakehouse数据刷新问题
解决Microsoft Fabric Notebook中PySpark无法获取Lakehouse文件实时修改时间的问题
问题原因
你使用os.stat()或os.path.getmtime()获取的是Spark会话启动时缓存的文件元数据。Fabric会将Lakehouse的Files目录挂载到Spark本地文件系统视图,这个视图是静态缓存的,不会随文件更新自动刷新,导致脚本始终读取会话启动时的旧数据。
解决方案
直接通过Spark底层的Hadoop FileSystem API访问OneLake存储,获取文件的实时状态:
from pyspark.sql import SparkSession # 获取当前Spark会话实例 spark = SparkSession.builder.getOrCreate() # 初始化Hadoop文件系统对象 hadoop_fs = spark._jvm.org.apache.hadoop.fs.FileSystem.get(spark._jsc.hadoopConfiguration()) # 替换为你的Lakehouse文件路径,格式:abfss://<工作区名称>@onelake.dfs.fabric.microsoft.com/<Lakehouse名称>/Files/test.csv target_file_path = "abfss://your_workspace@onelake.dfs.fabric.microsoft.com/your_lakehouse/Files/test.csv" # 获取文件实时状态 file_status = hadoop_fs.getFileStatus(spark._jvm.org.apache.hadoop.fs.Path(target_file_path)) # 将毫秒级时间戳转换为秒 last_modified_timestamp = file_status.getModificationTime() / 1000 print(f"文件最后修改时间戳:{last_modified_timestamp}")
额外优化
如果需要将时间戳转换为可读格式,可以搭配datetime模块:
from datetime import datetime formatted_time = datetime.fromtimestamp(last_modified_timestamp).strftime('%Y-%m-%d %H:%M:%S') print(f"格式化后的最后修改时间:{formatted_time}")
内容的提问来源于stack exchange,提问作者Fabulous_Fabric
相关产品推荐
相关产品推荐

