在Azure Databricks用PySpark写入SharePoint列表到Delta Lake时遇索引越界错误
可能的原因
- 列顺序不匹配:你定义的Schema列顺序和SharePoint实际返回的列顺序不一致。Spark指定Schema时会按顺序匹配列,如果返回的列顺序(比如先出现Title或系统列)和Schema不对应,就会触发索引越界。
- 系统列被自动拉取:SharePoint列表默认包含ID、Created、Modified等系统列,若你的读取逻辑未过滤这些列,返回的列数会多于Schema定义的3列,导致索引越界。
- 数据行列缺失:尽管column1-3是必填项,但可能存在部分行实际缺失列值(比如通过API绕过校验插入),导致返回的行数据列数不足,匹配Schema时出错。
对应的解决办法
- 强制指定读取列:在读取SharePoint数据时,明确指定只读取
column1、column2、column3,避免拉取多余列。示例代码(根据使用的连接器调整):df = spark.read.format("com.microsoft.azure.spark.sql.sharepoint") \ .option("siteUrl", "your-sharepoint-site-url") \ .option("listName", "your-list-name") \ .option("columns", "column1,column2,column3") \ # 明确指定需要的列 .schema(df_columns) \ .load() - 对齐Schema与返回列顺序:先不指定Schema,读取少量数据查看SharePoint返回的列顺序,再调整你定义的
df_columns顺序,确保完全匹配。 - 检查数据完整性:排查SharePoint列表中的所有行,确认必填列均有有效值,没有缺失列的异常行。
内容的提问来源于stack exchange,提问作者Sruthi Gopalakrishnan
相关产品推荐
相关产品推荐

