Spark之dataframe操作大全

一、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值