大数据学习之Spark——12DataFrame/DataSet

本文详细介绍了如何在Spark中创建DataFrame,包括从json文件、json格式的RDD、非json格式的RDD以及通过JDBC读取MySQL数据来创建DataFrame。内容涵盖了DataFrame的基本操作和注意事项,如显示数据、注册临时表等。
摘要由CSDN通过智能技术生成

一. 创建DataFrame

1. 读取json文件创建DataFrame

1. 说明
  1. json文件中的json数据不能嵌套json格式数据。
  2. DataFrame是一个一个Row类型的RDD,df.rdd()/df.javaRdd()。
  3. 可以两种方式读取json格式的文件。
  4. df.show()默认显示前20行数据。
  5. DataFrame原生API可以操作DataFrame(不方便)。
  6. 注册成临时表时,表中的列默认按ascii顺序显示列。
2. 案例
  1. Scala代码

    val conf: SparkConf = new SparkConf()
    conf.setMaster("local").setAppName("SQL")
    val sc: SparkContext = new SparkContext(conf)
    sc.setLogLevel("Error")
    val sQLContext: SQLContext = new SQLContext(sc)
    // 创建DataFrame
    // val frame: DataFrame = sQLContext.read.format("json").load("./data/person.json")
    val df: DataFrame = sQLContext.read.json("./data/person.json")
    
    // 等价于: select name, age from table
    // df.select(df.col("name"), df.col("age")).show()
    
    // 等价于: select name, age from table where age > 20
    // df.select(df.col("name"), df.col("age")).where(df.col("age") > 20).show()
    
    // 等价于: select count(*) from table group by age
    // df.groupBy(df.col("age")).count().show()
    df.groupBy(df.col("age")).count().show()
    
    // 创建临时表
    df.registerTempTable("people")
    // 等价于: select * from people
    // sQLContext.sql("select * from people").show()
    // sQLContext.sql("select * from people where age > 20").show()
    // sQLContext.sql("select age, count(*) from people group by age").show()
    // sqlDf.show()
    sc.stop()
    
  2. Java代码

    SparkConf conf = new SparkConf();
    conf.setMaster("local").setAppName("SQL");
    JavaSparkContext sc = new JavaSparkContext(conf);
    sc.setLogLevel("Error");
    SQLContext sqlContext = new SQLContext(sc);
    // Dataset<Row> dataset = sqlContext.read().format("json").load("./data/person.json");
    Dataset<Row> dataset = sqlContext.read().json("./data/person.json");
    dataset.show();
    

2. 通过json格式的RDD创建DataFrame

  1. scala代码

    val conf: SparkConf = new SparkConf()
    conf.setMaster("local").setAppName("SQL")
    val sc: SparkContext = new SparkContext(conf)
    sc.setLogLevel("Error")
    
    val sQLContext: SQLContext = new SQLContext(sc)
    
    val nameRDD: RDD[String] = sc.makeRDD(Array(
      "{\"name\": \"张三\", \"age\": 20}",
      "{\"name\": \"李四\", \"age\": 18}",
      "{\"name\": \"王五\", \"age\": 21}"
    ))
    
    val scoreRDD: RDD[String] = sc.makeRDD(Array(
      "{\"name\": \"张三\", \"score\": 89}",
      "{\"name\": \"李四\", \"score\": 88}",
      "{\"name\": \"王五\", \"score\": 90}"
    ))
    
    val nameDF: DataFrame = sQLContext.read.json(nameRDD)
    val scoreDF: DataFrame = sQLContext.read.json(scoreRDD)
    // nameDF.select(nameDF.col("name"), nameDF.col("age")).show()
    // scoreDF.select(scoreDF.col("name"), scoreDF.col("score")).show()
    
    nameDF.registerTempTable("name")
    scoreDF.registerTempTable("score")
    sQLContext.sql("select name, age from name").show()
    sQLContext.sql("select name, score from score").show()
    sQLContext.sql("select name.name, age, score from name, score where name.name = score.name").show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值