spark的DataFrame的schema模式:读时模式,指定模式

该博客介绍了Spark中处理JSON数据的两种方式:读时模式和指定模式。读时模式依赖于数据前几行推断列类型,可能导致精度损失。而指定模式可以通过StructType或caseclass明确指定列数据类型,避免精度问题。示例代码展示了如何自定义schema并加载JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读时模式

    val path="/Volumes/Data/BigData_code/data/"

    //读取json⽣成dataframe

val df = spark.read.format("json").load(path + "flight-data/json/2015-summary.json")
df.printSchema()

读时模式是通过前几行的数据,来对各个列进行推断各个列的数据类型。优点是方便。但是,读时模式会造成精度损失。因为在前几行推断出是int类型,但是,实际是long类型

指定模式

方法1:使用StructType实现指定

val path="/Volumes/Data/BigData_code/data/"
//⾃定义schema模式    
val mySchema = StructType(Array(
      StructField("DEST_COUNTRY_NAME", StringType, true),                      
      StructField("ORIGIN_COUNTRY_NAME", StringType, true),
      StructField("count", LongType, false, Metadata.fromJson("{\"home\":\"world\"}"))    ))    
//⽣成DataFrame    
val df = spark.read.format("json").schema(mySchema) //使⽤⾃定义的schema模式
   .load(path &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值