spark sql结构化数据文件处理-dataframe

spark sql

这个类似于hive为mapreduce提供上层接口,使数据分析师可以不必为写mapreduce的Java代码而烦恼,同样并不是所有工程师都会Scala语言,所以spark sql就是做这个事情的。
spark sql是spark用来处理结构化数据的模块,它提供一个叫dataframe的编程抽象结构数据模型(带有schema信息的RDD),用户可以通过sql,dataframe API,dataset api三种方式
现在讲dataframe

dataframe的创建

spark.read.text("people.txt")
spark.read.csv("people.csv")
spark.read.json("people.json")
spark.read.parquet("people.parquet")

如果hdfs文件系统的/spark目录下有一个word.txt文件,那么就可以创建dataframe

val personDF=spark.read.text("/spark/word.txt")

查看personDF属性

personDF.printSchema()

打印personDF

personDF.show()

RDD转换dataframe
调用RDD的toDF()方法

val lines=sc.textFile("/spark/student.txt").map(_.split(" "))
case class Person(id:Int,name: String, age:Int)
val personRDD=lines.map(x=>Person(x(0).toInt,x(1),x(2).toInt))
val personDF=personRDD.toDF()
scala> personDF.show
+---+-----+---+
| id| name|age|
+---+-----+---+
|  1|zhang| 20|
|  2|   li| 10|
|  3| xiao| 21|
|  4| wang| 90|
|  5|jiang| 80|

查看数据属性

personDF.printSchema

对dataframe的操作和Python极其相似

dataframe的常用操作

show()
printSchema()
select(), select的语法和sql相似

personDF.select(personDF.col("name")).show()
personDF.select(personDF("name").as("username"),personDF("age").show())

filter(),过滤,其实就是条件查询

personDF.filter(personDF("age")>=25).show()

groupBy() 对记录进行分组

personDF.groupBy("age").count().show()

sort(), 对特定字段进行排序操作
对年龄排序

personDF.sort(personDF("age").desc).show()

sql风格操作

dataframe的强大之处就是可以将它看做一个关系型数据表,然后可以在程序中直接使用spark.sql()的方式执行sql 查询
而使用sql表操作的前提是需要将dataframe注册成为一个临时表

personDF.registerTempTable("t_person")

这样的好处,就是可以直接使用sql语句

spark.sql("select * from t_person order by age desc limit 2").show()

不过注意,这个操作,就是sql的操作貌似是要依赖 hive的

dataset

提供了一种特定域对象中的强类型集合,也就是在RDD的每行数据中添加了类型的约束条件,只有满足约束条件的数据类型才能正常运行。
这就是相当于Java中的泛型
dataset的创建

val personDS=spark.createDataset(sc.textFile("/spark/person.txt"))
personDS.show()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值