• 分别用反射、编程接口的方式创建DataFrame


    1、通过反射的方式 使用反射来推断包含特定数据类型的RDD,这种方式代码比较少,简洁,只要你会知道元数据信息时什么样,就可以使用了

    代码如下:

    import org.apache.spark.sql.{SQLContext, SaveMode}
    import org.apache.spark.{SparkConf, SparkContext}
    
    object RDD2DataFrame {
      def main(args: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("DF").setMaster("local")
        val sc = new SparkContext(conf)
        val sQLContext = new SQLContext(sc)
        //创建一个普通的RDD
        val rdd = sc.textFile("D:\data\spark\students.txt")
       var rdd2= rdd.map(t=>{
          val lines = t.split(",")
          studented(lines(0).toInt,lines(1),lines(2).toInt)
    
        })
        //注意:需要导入隐式转换
        import sQLContext.implicits._
        val df = rdd2.toDF()
        //注册临时表
        df.registerTempTable("student")
        val dfs = sQLContext.sql("select name from student where age>18")
        dfs.write.mode(SaveMode.Append).text("D:\result\Rdd2DataFrame")
    
      }
    
    }
    case class studented(id:Int,name:String,age:Int)
    

      

    2、通过编程接口的方式 你可以自己动态的构建一份元数据,这种代码比较多,但是适合你不知道元数据的时候使用,一般都用这种方式

    代码如下:

    object RDD2DataFrame2 {
      def main(args: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("df02").setMaster("local")
        val sc = new SparkContext(conf)
        val sqlContext = new SQLContext(sc)
        //val df = sqlContext.read.json("D:\data\spark\students.json")
    
    
       val rdd = sc.textFile("D:\data\spark\students.txt")
        val rowRdd = rdd.map(t => {
         val str = t.split(",")
          Row(str(0).toInt, str(1), str(2).toInt)
       })
        //构建StructType
        val structType = StructType(Array(StructField("id", IntegerType, true),
          StructField("name", StringType, true),
          StructField("age", IntegerType, true)
        ))
        //创建DataFrame
        val df: DataFrame = sqlContext.createDataFrame(rowRdd,structType)
        df.registerTempTable("stu")
        val sql = sqlContext.sql("select * from stu where age>17")
        sql.rdd.foreach(println)
      }
    }
    

      

  • 相关阅读:
    聊天demo SignalR
    通过NSXMLParser来解析XML
    项目中遇到的问题
    iOS网络: 把Array和Dictionaries序列化成JSON对象
    通过 NSURLConnection 发送 HTTP GET /HTTP POST /HTTP DELETE /HTTP PUT 请求
    iOS网络: 通过NSMutableURLRequest修改一个URL的请求
    iOS网络: NSURLConnection进行同步下载
    iOS网络: NSURLConnection进行异步请求
    swipe Rotation Pan Press Tap Pinch
    手势识别1:
  • 原文地址:https://www.cnblogs.com/zmoumou/p/9997148.html
Copyright © 2020-2023  润新知