Scala构建元数据

时间:2021-12-02 14:53:00

反射方式构建元数据: 

  通过反射来获取RDD中的Schema信息。这种方式适合于列名(元数据)已知的情况下

    步骤:

      1.SparkConf配置环境

      2.SparkContext初始化上下文

      3.SQLContext初始化SparkSQL上下文

      4.创建一个普通的RDD(sc.textFile)

      5.使用map方法切割行数据,切割取出数据放入case类中

         studented(lines(0).toInt, lines(1), lines(2).toInt)

      6.反射方式中普通RDD创建DataFrame需要导入隐式转换

         //注意:需要导入一个隐式转换
         import sQLContext.implicits._
         val df: DataFrame = rdd2.toDF()

      7.注册临时表

         方式一: df.createTempView("student1")
         方式二: df.registerTempTable("student")  //过时了

      8.写SQL语句,*的浪起来

         val sql = sQLContext.sql("select * from student")

      9.保存结果到本地或者HDFS

        //保存查询结果到本地
        sql.write.json("c:\\demo\\gaoyong.json")
        //保存查询结果到HDFS
        sql.write.json("hdfs://awen01:9000/json")

编程接口方式构建元数据:

  通过编程接口的方式将Schema信息应用于RDD,这种方式可以处理那种在运行时才能知道列的方式。

一般不知道元数据的情况下使用.

    步骤:

      1.SparkConf配置环境

      2.SparkContext初始化上下文

      3.SQLContext初始化SparkSQL上下文

      4.创建一个普通的RDD(sc.textFile)

      5.使用map切割行数据,将需要的字段放入到Row类中

        val lines: RDD[Row] = rdd.map(t => {
        val str = t.split(",")
          Row(str(0).toInt, str(1), str(2).toInt)
        })

      6.编程结构的方式需要构建表的框架,构建StructType,及其元数据

val structType: StructType = StructType(Array(
StructField("ids",IntegerType,true)
StructField("names",StringType,true)
StructField("ages",IntegerType,true)
))

      7.构建DataFrame

        val df = sQLContext.createDataFrame(lines,structType)

      8.注册临时表

         方式一: df.createTempView("student1")
         方式二: df.registerTempTable("student")  //过时了

      9.写SQL语句,*的浪起来

         val sql = sQLContext.sql("select * from student")

      10.保存结果到本地或者HDFS

        //保存查询结果到本地
        sql.write.json("c:\\demo\\gaoyong.json")
        //保存查询结果到HDFS
        sql.write.json("hdfs://awen01:9000/json")