Spark-Excel读取Excel时skipFirstRows参数失效及公式单元格报错求助
解决spark-excel读取Excel跳过首行及公式单元格报错问题
核心问题分析
报错java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC formula cell是因为首行的数值公式单元格被读取时类型推断逻辑冲突;同时skipFirstRows参数与header=true的组合会干扰表头识别逻辑,导致无法正确跳过首行。
解决方案
方案一:指定表头行号+处理公式单元格
直接用headerRowNumber指定表头所在行(从1开始计数),同时添加formulaPolicy参数读取公式计算值,避免类型匹配错误:
df = spark.read.format("com.crealytics.spark.excel")\ .option("header", "true")\ .option("inferSchema", "true")\ .option("headerRowNumber", "2")\ # 明确表头位于第2行 .option("formulaPolicy", "VALUE")\ # 读取公式的计算结果而非公式本身 .option("treatEmptyValuesAsNulls", "true")\ .load("dbfs:/FileStore/filename.xlsx") df.show()
方案二:指定数据读取范围(兜底方案)
如果方案一仍存在问题,可通过dataAddress精准指定从第二行开始读取的单元格范围,彻底跳过首行:
# 替换Sheet1为你的实际工作表名称 df = spark.read.format("com.crealytics.spark.excel")\ .option("header", "true")\ .option("inferSchema", "true")\ .option("dataAddress", "'Sheet1'!A2:ZZ")\ # 从Sheet1的A2行开始读取所有列 .option("formulaPolicy", "VALUE")\ .option("treatEmptyValuesAsNulls", "true")\ .load("dbfs:/FileStore/filename.xlsx") df.show()
内容的提问来源于stack exchange,提问作者Goutham Boine
相关产品推荐
相关产品推荐

