一、datafram描述
DataFrame 是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表。数据集的每一列都带有名称和类型,对于数据的内部结构又很强的描述性。
二、datafram特点
1、支持 KB 级到 PB 级得到数据处理
2、支持多种数据格式和存储系统
3、通过 Spark SQL Catalyst 优化器可以进行高效的代码生成与优化
4、能够无缝集成 Spark 上的大数据处理工具
5、提供了 Python 、 Java 、 Scala 、 R 等多种语言 API
三、创建dataframe对象
spark提供了多种生成DataFrame的 方法:有从结构化数据文件中创建dataframe;外部数据库创建DataFrame;RDD创建DataFrame,hive表中创建dataframe。
1、结构化数据文件中创建dataframe:
1.1、利用结构化数据文件parquet文件创建DataFrame
scala> val df=spark.sqlContext.read.load("file://///usr/local/spark-2.2.2-bin-hadoop2.6/examples/src/main/resources/users.parquet")
scala> df.show
+------+--------------+----------------+
| name|favorite_color|favorite_numbers|
+------+--------------+----------------+
|Alyssa| null| [3, 9, 15, 20]|
| Ben| red| []|
+------+--------------+----------------+
1.2、spark读取json文件为dataframe,有两种方法,都一样
scala> val df1=spark.sqlContext.read.format("json").load("file://///usr/local/spark-2.2.2-bin-hadoop2.6/examples/src/main/resources/people.json")
scala> val df2=spark.sqlContext.read.json("file://///usr/local/spark-2.2.2-bin-hadoop2.6/examples/src/main/resources/people.json")
df2: org.apache.spark.sql.DataFrame = [age: bigint, name: string]
scala> df2.show
+----+-------+
| age| name|
+----+-------+
|null|Michael|
| 30| Andy|
| 19| Justin|
+----+-------+
2、外部 数据库创建DataFrame
连接 mysql,利用mysql的表创建dataframe,记得mysql要开远程连接权限
val jdf = spark.sqlContext.read.format("jdbc").options(Map("url"->"jdbc:mysql://master:3306/test","user"->"root","password"->"123456","dbtable"->"aaa")).load()
3、RDD创建DataFrame
scala> val data=sc.textFile("file://///usr/local/spark-2.2.2-bin-hadoop2.6/examples/src/main/resources/people.txt")
data: org.apache.spark.rdd.RDD[String] = file://///usr/local/spark-2.2.2-bin-hadoop2.6/examples/src/main/resources/people.txt MapPartitionsRDD[13] at textFile at <console>:24
scala> val data1=data.map{x=>val line=x.split(", ");(line(0),line(1).toInt)}
data1: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[14] at map at <console>:26
scala> val person=data1.toDF()
person: org.apache.spark.sql.DataFrame = [_1: string, _2: int]
scala> person.show
+-------+---+
| _1| _2|
+-------+---+
|Michael| 29|
| Andy| 30|
| Justin| 19|
+-------+---+
4、hive表中创建dataframe
scala> spark.sql("select * from train.emp_in").show
+-----+------+---------+----+----------+----+----+------+
|empno| ename| job| mgr| hiredate| sal|comm|deptno|
+-----+------+---------+----+----------+----+----+------+
| 7369| SMITH| CLERK|7902|1980/12/17| 800|null| 20|
| 7499| ALLEN| SALESMAN|7698| 1981/2/20|1600| 300| 30|
| 7521| WARD| SALESMAN|7698| 1981/2/22|1250| 500| 30|
| 7566| JONES| MANAGER|7839| 1981/4/2|2975|null| 20|
| 7654|MARTIN| SALESMAN|7698| 1981/9/28|1250|1400| 30|
| 7698| BLAKE| MANAGER|7839| 1981/5/1|2850|null| 30|
| 7782| CLARK| MANAGER|7839| 1981/6/9|2450|null| 10|
| 7788| SCOTT| ANALYST|7566| 1982