2. 掌握 Spark DataFrame/SQL 编程——aboutyun

1、什么是 Spark DataFrame & SQL?

Spark DataFrame 是一个带有列名称的分布式数据集,类似于关系型数据库中的一张表,可以通过结构化的数据文件,Hive中的表,外部数据库以及已经存在的RDD得到。(通过Rdd来创建DataFrame

Spark SQL 是使用 SQL 或 HiveQL 语法编写 SQL 语句,来执行计算任务。

 

2、Spark DataFrame & SQL 引入动机?

1)Spark DataFrame & SQL 执行效率相比 RDD 更高

2)Spark DataFrame & SQL 代码更简洁

3)Spark DataFrame & SQL 带有自动优化程序引擎

 

3、 DataFrame 读取数据(如何把一个文件生成一个dataFrame)

// json 文件路径 val path = "file:///home/aboutyun/examples/src/main/resources/people.json" val people = sqlContext.read.json(path) // 打印 DataFrame 的元信息 people.printSchema()
// 查看前五条数据 people.show(5)

因为没有这个文件及内容。所以现在创建。

有两种方法,方法一

然后上传上去。

通过hdfs 的命令,将上传的文件,再传到 hdfs 磁盘里面

 

方法二。是用追加的方式。

 

上传完到hdfs后,可以进行解析了。

目前还是没有正确读取。将格式改为如下

下面就是正确的解析得到的内容

 

4 、DataFrame/SQL 计算结果
// 得到 年龄在 13 ~ 19 之间的人的姓名                                                                                                                                              val teensOne = people.where("age >= 13 and age <=19").select("name")                                                                      teensOne.show(3)     (这个是sprak中API的方式)

 // 将 DataFrame 注册为临时表 (这个是通过SQL的方式) people.registerTempTable("people")                                                                                                                                                   // 通过 SQL 语句来计算任务                                                                                                                                                            val teensTwo = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")                                 teensTwo.show(3)

 

用API的方式:

用sql的方式:

5、RDD与DataFrame的互相转换

RDD转DataFrame
// 创建一个 RDD                                                                                                                                                                                 val people = sc.textFile("file:///home/aboutyun/examples/src/main/resources/people.txt")
people.show(5)    如下所示,先将文件转为一个rdd

方法一:

// 定义 schema 字符串                                                                                                                                                                       val schemaString = "name age"      

 // 生成 schema                                                                                                                                                                                val schema =   StructType(     schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true)))

// 转换 RDD 类型为 Row                                                                                                                                                                 val rowRDD = people.map(_.split(",")).map(p => Row(p(0), p(1).trim))       

 // RDD => DataFrame                                                                                                                                                                     val peopleDataFrame = sqlContext.createDataFrame(rowRDD, schema)

 

方法二:

// 定义 schema 字符串 import sqlContext.implicits._    

// 定义一个 case 类                                                                                                                                                                            case class Person(name: String, age: Int)


// RDD => DataFrame                                                                                                                                                                     val peopleDataFrame = people.map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()

 

DataFrame转RDD

//  DataFrame => RDD                                                                                                                                                                    val peopleRdd = peopleDataFrame.rdd

 

但是转换时候报错了

字段类型错误。

 

 

 

 

 

 

 

 

3. 掌握 Spark Streaming 编程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值