Azure Databricks:无需循环为DataFrame添加源文件名列
解决方案
要在批量读取目录下的JSON文件时为每条记录添加源文件完整路径,你需要使用Spark内置的input_file_name()函数,直接引用file.name会报错是因为该变量仅在数据源扫描阶段的特定上下文可用,无法在读取完成后的DataFrame操作中使用。
正确代码实现
from pyspark.sql.functions import input_file_name filePath = '/mnt/mypath/' # 批量读取目录下的多行JSON文件 dfReadFHIR_raw = spark.read.option("multiline", "true").json(filePath) # 添加源文件路径列 df_with_source = dfReadFHIR_raw.withColumn("RecordSource", input_file_name())
说明
input_file_name()是Spark SQL提供的内置函数,会自动为每条记录关联其对应的源文件完整路径,无需循环处理单个文件,完全保留批量读取的性能优势。- 保持
multiline="true"的配置,确保能正确解析每个文件中的多行JSON结构。
运行上述代码后,你将得到包含RecordSource列的DataFrame,其中每条记录的该列值对应其来源文件的完整路径,与你期望的输出格式一致。
内容的提问来源于stack exchange,提问作者CrzyDBLady
相关产品推荐
相关产品推荐

