Spark使用crealytics读取Excel百分比值格式保留问题咨询
解决方案
首先明确两个基础逻辑:
- Apache Spark本身没有内置专属的百分比数据类型,Excel中百分比单元格的底层存储值本身就是浮点小数,只是附加了百分比格式的展示规则
- 你使用的crealytics spark-excel库原生支持保留单元格格式读取,不需要关闭类型推断,也不需要手动做类型转换,只需新增两个读取参数即可
修改后的代码
val spark = SparkSession .builder .appName("trimTest") .master("local[*]") .getOrCreate() val df = spark.read .format("com.crealytics.spark.excel") .option("header", "true") .option("maxRowsInMemory", 1000) .option("inferSchema", "true") // 新增两个参数保留百分比格式 .option("keepOriginalFormat", "true") // 如果需要完全保留各个单元格原有的格式差异(比如有的是整数百分比、有的是两位小数),可以删除下面这行配置 .option("format.percentage", "0.##%") .load("data/percentage.xlsx") df.printSchema() df.show(10)
说明
- 开启
keepOriginalFormat后,读取过程会自动应用Excel单元格的原有格式规则,输出时直接展示百分比格式,不会返回原始浮点值 - 读取后的列schema仍然是数值类型(DoubleType),不会被转成字符串,符合你的要求
- 该特性需要crealytics spark-excel版本≥0.13.7,版本过低的话先升级依赖即可
内容的提问来源于stack exchange,提问作者Sarvesh Singh
相关产品推荐
相关产品推荐

