You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成CSV文件时如何消除科学计数法?Delta表导出场景求助

解决Delta表导出CSV时Double类型数值显示科学计数法的问题

核心解决方案

方法1:禁用CSV写入的科学计数法(Spark 3.0+适用)

Spark的CSV写入器提供了disableScientificNotation参数,直接设置为true即可强制大数值以普通数字格式输出,无需修改列类型:

# Python 代码示例
df = spark.read.format("delta").load("/path/to/your/delta-table")
df.write.format("csv") \
    .option("header", "true") \
    .option("disableScientificNotation", "true") \
    .save("/path/to/csv-output")
// Scala 代码示例
val df = spark.read.format("delta").load("/path/to/your/delta-table")
df.write.format("csv")
    .option("header", "true")
    .option("disableScientificNotation", "true")
    .save("/path/to/csv-output")

方法2:将Double列转换为字符串(兼容所有Spark版本)

如果你的Spark版本低于3.0,或者需要更精准的格式控制,可以将Double列先转换为足够精度的Decimal类型,再转成字符串,彻底避免科学计数法:

# Python 代码示例
from pyspark.sql.functions import col

df = spark.read.format("delta").load("/path/to/your/delta-table")
# 转换为decimal(18,0)适配整数,若有小数可调整为decimal(18,2)等格式
processed_df = df.withColumn("a", col("a").cast("decimal(18,0)").cast("string"))
processed_df.write.format("csv").option("header", "true").save("/path/to/csv-output")
// Scala 代码示例
import org.apache.spark.sql.functions._

val df = spark.read.format("delta").load("/path/to/your/delta-table")
val processedDf = df.withColumn("a", col("a").cast("decimal(18,0)").cast("string"))
processedDf.write.format("csv").option("header", "true").save("/path/to/csv-output")

关于format_number无效的原因

你之前使用format_number仅单条记录生效、多条失效,大概率是因为:

  • format_number返回的是带千分位分隔符的字符串(如22,409,595),若后续写入时未确保列类型为字符串,可能被Spark重新解析为数值类型,再次触发科学计数法;
  • 未正确用处理后的字符串列覆盖原Double列,导致最终写入的还是原始的Double类型数据。

内容的提问来源于stack exchange,提问作者Siva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:41:03