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