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输出一下。

  • 相关阅读:
    情报类资源整合
    运营商查询
    Mybatis 示例之 SelectKey
    TortoiseSVN的bin目录下面没有svn.exe
    IntelliJ IDEA 的SVN配置与使用
    Win10安装.net framework 4.0失败提示已是操作系统一部分如何解决
    eclipse中 properties文件编码问题
    springMVC注解@initbinder日期类型的属性自动转换
    2013
    java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/14445553.html
Copyright © 2011-2022 走看看