在Databricks中转换Excel读取后的DataFrame并生成Delta表
解决Excel复合表头转换并存入Delta表的问题
问题分析
你之前的代码仅合并了首行前两列与原表头的后续列,未覆盖所有列的复合表头合并;且读取Excel时默认将第一行当表头,导致表头行被误当作数据处理,因此无法得到预期结果。以下是适配Databricks环境的完整解决方案:
1. 读取Excel文件(保留所有行)
读取时不指定header参数,让pandas把所有行(包括复合表头行)完整读入:
import pandas as pd import numpy as np # 替换为你的Excel文件DBFS路径 df = pd.read_excel("/dbfs/your/excel/file/path.xlsx", header=None)
2. 合并复合表头行
假设原Excel前两行是需要合并的表头(第一行是分类、第二行是具体列名),先处理首行空值(若存在同分类跨列的情况),再拼接两行内容生成完整列名:
# 填充首行空值,继承左侧最近的非空分类值 header_category = df.iloc[0].fillna(method='ffill').tolist() # 提取第二行的子列名 header_subcols = df.iloc[1].tolist() # 拼接生成完整列名,处理子列名为空的情况 new_columns = [] for cat, subcol in zip(header_category, header_subcols): if pd.notna(subcol): new_columns.append(f"{cat}_{subcol}") else: new_columns.append(cat)
3. 提取有效数据行
跳过前两行表头,从第三行开始提取数据并设置新表头:
# 从索引2开始取数据行,重置索引 df_clean = df.iloc[2:].reset_index(drop=True) # 给数据行设置合并后的表头 df_clean.columns = new_columns
4. 写入Delta表(Databricks环境)
将处理好的Pandas DataFrame转换为Spark DataFrame,再写入Delta表:
# 转换为Spark DataFrame spark_df = spark.createDataFrame(df_clean) # 写入Delta表(两种方式任选) # 方式1:写入DBFS路径 spark_df.write.format("delta").mode("overwrite").save("/dbfs/path/to/your/delta_table") # 方式2:写入Unity Catalog托管表(需提前创建catalog和schema) # spark_df.write.format("delta").mode("overwrite").saveAsTable("your_catalog.your_schema.your_table_name")
内容的提问来源于stack exchange,提问作者MBINYALA
相关产品推荐
相关产品推荐

