Spark SQL

1.DataFrame与RDD的区别

  RDD是分布式的 Java对象的集合

  DataFrame是一种以RDD为基础的分布式数据集,也就是分布式的Row对象的集合(每个Row对象代表一行记录),提供了详细的结构信息,也就是我们经常说的模式(schema).简单理解就是类似表

2.Schema 是什么

         DataFrame中提供了详细的数据结构信息,从而使得SparkSQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么,

 DataFrame中的数据结构信息,即为schema。

3.

 people.json 文件:

{"name":"小周","age":88}
{"name":"小红", "age":30}
{"name":"李行", "age":19}
{"name":"小翠", "age":88}

/**
  * Created by soyo on 17-10-10.
  */
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession
object Spark_Sql {

  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setAppName("soyo").setMaster("local[2]")// 写这两条语句不用设置-Dspark.master=local
    val sc=new SparkContext(conf)                                    //
     val spark=SparkSession.builder().getOrCreate()
    val df= spark.read.json("file:///home/soyo/桌面/spark编程测试数据/people.json")
     df.show()
     df.printSchema()
    df.select(df("name"),df("age")+5).show()
    df.filter(df("age")>20).show()
    df.groupBy("age").count().show()
    df.sort(df("age").desc).show()
    df.select(df("name").as("姓名"),df("age").as("年龄")).sort(df("age").desc).show()
    df.select("name","age").write.format("csv").save("file:///home/soyo/桌面/spark编程测试数据/people_json.csv") //DF的保存(方法一)
    df.rdd.saveAsTextFile("file:///home/soyo/桌面/spark编程测试数据/people_save.txt")//DF的保存(方法二)
    //再次加载
    val text=sc.textFile("file:///home/soyo/桌面/spark编程测试数据/people_json.csv")
    text.foreach(println)
  }

}

运行结果:

+---+----+
|age|name|
+---+----+
| 88|  小周|
| 30|  小红|
| 19|  李行|
| 88|  小翠|
+---+----+

root
 |-- age: long (nullable = true)
 |-- name: string (nullable = true)

+----+---------+
|name|(age + 5)|
+----+---------+
|  小周|       93|
|  小红|       35|
|  李行|       24|
|  小翠|       93|
+----+---------+

+---+----+
|age|name|
+---+----+
| 88|  小周|
| 30|  小红|
| 88|  小翠|
+---+----+

+---+-----+
|age|count|
+---+-----+
| 19|    1|
| 88|    2|
| 30|    1|
+---+-----+

+---+----+
|age|name|
+---+----+
| 88|  小周|
| 88|  小翠|
| 30|  小红|
| 19|  李行|
+---+----+

+---+---+
| 姓名| 年龄|
+---+---+
| 小周| 88|
| 小翠| 88|
| 小红| 30|
| 李行| 19|
+---+---+

小周,88
小红,30
李行,19
小翠,88

原文地址:https://www.cnblogs.com/soyo/p/7647638.html