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

  • 相关阅读:
    大数据介绍
    Android系统手机端抓包方法
    svn warning W205000 :windows下 SVN idea 配置 代理配置
    idea tomcat 启动日志乱码
    翻译 API 一句话API
    git push proxy 取消不掉 can not prox....
    webpack+vue搭建vue项目
    java 多线程
    实时监听 JavaScript改变 input 值 input输入框内容 value 变化实时监听
    leetcode 数组
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/14445553.html
Copyright © 2011-2022 走看看