Spark中如何将JSON里的Double类型转为字符串(避免科学计数法)
解决Spark SQL中Double转字符串出现科学计数法的问题
针对大数值Double转字符串时自动变为科学计数法的问题,给你几个实用的解决方法:
用
format_number函数格式化
该函数可指定保留的小数位数,默认会添加千分位分隔符,不需要的话可以用正则去掉:-- 保留两位小数,带千分位格式 SELECT format_number(amount, 2) AS amount_str FROM your_table; -- 移除千分位逗号,得到纯数字字符串 SELECT regexp_replace(format_number(amount, 2), ',', '') AS amount_str FROM your_table;用
printf函数控制输出格式
通过标准的printf格式字符串指定小数位数,强制以普通数字格式输出:SELECT printf("%.2f", amount) AS amount_str FROM your_table;读取JSON时直接指定Decimal类型
从根源避免使用Double类型存储,读取JSON时自定义Schema,将amount设为Decimal类型,后续转字符串自然不会出现科学计数法:// Scala示例,其他语言逻辑一致 import org.apache.spark.sql.types.{StructType, StructField, DecimalType, StringType} val schema = new StructType() .add("amount", DecimalType(18, 2)) .add("currency", StringType) val df = spark.read.schema(schema).json("your_json_file_path") // 直接转换为字符串即可 df.select(cast(col("amount") as String).alias("amount_str")).show()
内容的提问来源于stack exchange,提问作者Rohit Garg
相关产品推荐
相关产品推荐

