zoukankan      html  css  js  c++  java
  • spark的DataFrame的schema模式:读时模式, 指定模式

    读时模式

        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 + "flight-data/json/2015-summary.json")
        df.printSchema()
    

    方法2:使用case class实现指定

        val path="/Volumes/Data/BigData_code/data/"
        //自定义schema模式
        case class myClass (
             DEST_COUNTRY_NAME:String,ORIGIN_COUNTRY_NAME:String,count:Long
                               )
        val mySchema = Encoders.product[myClass].schema
        //生成DataFrame
        val df = spark.read.format("json").schema(mySchema) //使用自定义的schema模式
          .load(path + "flight-data/json/2015-summary.json")
        df.printSchema()
    

    假如,不需要指定列名可以使用以下方法:

        val path="/Volumes/Data/BigData_code/data/"
        //自定义schema模式
        val mySchema = Encoders.product[(String, String, Long)].schema
        //生成DataFrame
        val df = spark.read.format("json").schema(mySchema) //使用自定义的schema模式
          .load(path + "flight-data/json/2015-summary.json")
        df.printSchema()
    

    注意:这里有给默认的列名:_1,_2,_3。自己可以使用printSchema输出一下。

  • 相关阅读:
    C#中ref和out的原理
    C#托管堆和垃圾回收(GC)
    C#类成员初始化顺序
    HTTP认证之摘要认证——Digest(二)
    HTTP认证之摘要认证——Digest(一)
    设计模式之建造者模式——Builder
    Shader专题:卡通着色(一)控制颜色的艺术
    小班同学学习经历分享(一)游戏程序员成长札记
    UniRx精讲(二):独立的 Update &UniRx 的基本语法格式
    UniRx精讲(一):UniRx简介&定时功能实现
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/14445553.html
Copyright © 2011-2022 走看看