spark学习(7)之使用SparkSession的CreateDataFrame和其他有格式(json/parquet)的数据源来创建DataFrame

一、使用SparkSession的CreateDataFrame

在上一遍中我们讲了使用使用样本类case class创建DataFrame,这一篇我们来看一下怎么使用SparkSession创建DataFrame,我们看一下SparkSession的一个api
SparkSession.createDataFrame(rowRDD: RDD[Row], schema: StructType): DataFrame
它使用俩参数一个是RDD[Row],一个是StructType
我们需要把数据集转化成RDD[Row]的格式,然后使用StructType构建DataFrame的结构。如果想使用Row和StructType需要导入对应的包

import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
//读取文件
val rdd1=sc.textFile("/root/training/emp.csv").map(_.split(","))
//把rdd1映射成RDD[Row]
val row=rdd1.map(x=>Row(x(0).toInt,x(1),x(2),x(3),x(4),x(5).toInt,x(6),x(7).toInt))
//使用StructType构建表DataFrame的结构
val myschema = StructType(List(StructField("empno", DataTypes.IntegerType), StructField("ename", DataTypes.StringType),StructField("job", DataTypes.StringType),StructField("mgr", DataTypes.StringType),StructField("hiredate", DataTypes.StringType),StructField("sal", DataTypes.IntegerType),StructField("comm", DataTypes.StringType),StructField("deptno", DataTypes.IntegerType)))
//使用SparkSession构建DataFrame
val emp=spark.createDataFrame(row,myschema)
//打印表结构
emp.printSchema
//使用DSL语句查询一下emp
emp.show

这就创建完DataFrame了,如果我们使用DSL语句,那么我们就可以直接操作了,如果我们想使用标准的SQL语句那么我们把DataFrame转换成视图,然后再用标准的语句操作就可以了。
在这里插入图片描述

二、使用具有固定格式的数据源来创建DataFrame

固定格式的数据源:
1、json文件
2、parquet的文件
3、jdbc
4、hive
在官方spark项目包中有提供的json文件和parquet的文件,文件路径在:
/root/training/spark-2.1.0-bin-hadoop2.7/examples/src/main/resources
(1)使用json文件生成dataFrame

val jsonDF=spark.read.json("/root/training/spark-2.1.0-bin-hadoop2.7/examples/src/main/resources/people.json")
//打印一下表结构schema
jsonDF.printSchema

在这里插入图片描述
看到上边使用read带上json的方式直接读取json文件,其实我们使用read方法也可以直接读取,只不过是直接读取的数据源是parquet的文件,默认读取的是parquet的文件。还有一种读取方法使用read.formatted(“json”).load

val jsonDF=spark.read.format("json").load("/root/training/spark-2.1.0-bin-hadoop2.7/examples/src/main/resources/people.json")
jsonDF.printSchema

在这里插入图片描述
2、使用parquet文件作为数据源生成DataFrame
parquet文件是默认的一种数据类型文件,spark默认读写的文件类型都是parquet类型,他是一种列式存储的方式文件。

val parquetDF=spark.read.load("/root/training/spark-2.1.0-bin-hadoop2.7/examples/src/main/resources/users.parquet")
//打印parquetDF的表结构

在这里插入图片描述
(*)把其他格式的数据转换成Parquet文件:推荐

(*)支持表Schema的合并
创建两张表结构一样的DataFrame

val df1=sc.makeRDD(1 to 5).map(i=>(i,i*2)).toDF
val df2=sc.makeRDD(6 to 10).map(i=>(i,i*2)).toDF
df1.write.parquet("/root/temp/testtable/key=1")
df2.write.parquet("/root/temp/testtable/key=2")
val df3=spark.read.option("mergeSchema","true").parquet("/root/temp/testtable")

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枣泥馅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值