Spark sql DataFrame Datasets Guide

Spark SQL不是SQL !!!!!!!!


一.Spark  SQL定义
Spark SQL is Apache Spark's module for working with structured data.
Spark结构查询语言是阿帕奇Spark用于处理结构化数据的模块。
(没有体现sql)
Spark SQL is not about SQL
Spark SQL is about more than SQL
不仅仅是sql框架而是超出范围
二.Spark SQL的优势

1.集成
将SQL查询与Spark程序无缝混合。
2.统一的数据访问
以同样的方式连接到任何数据源。(不需要sqoop)
3.Hive集成
在现有仓库上运行SQL或HiveQL查询。
公用metastore为数据中心
4.标准连接

通过JDBC或ODBC连接。对稳定性,社区支持,效果非常好

也就是Data Source API

三.DataFrame、Datasets

数据集是分布式数据集合。数据集是Spark 1.6中添加的新接口,它提供了RDD的优点(强打字,使用强大的lambda函数的能力)以及Spark SQL优化执行引擎的优势。数据集可以被构造从JVM对象,然后使用功能性的转换(操作mapflatMapfilter等等)。数据集API可用于Scala和 JavaPython不支持数据集API。但是由于Python的动态特性,数据集API的许多优点已经可用(例如,您可以自然地通过名称访问行的字段row.columnName)。R的情况类似。

DataFrame是一个数据集,组织到命名列中。它在概念上等同于关系数据库中的表或R / Python中的数据框,但在引擎盖下具有更丰富的优化。DataFrame可以从各种来源构建而成,例如:结构化数据文件,Hive中的表格,外部数据库或现有的RDD。数据帧API是Scala,Java的,可用的Python[R 在Scala和Java中,DataFrame由Row的数据集表示Scala API中DataFrame只是一个类型的别名Dataset[Row]而在Java API中,用户需要Dataset<Row>用来表示一个DataFrame

四.操作

import org.apache.spark.sql.SparkSession
val spark = SparkSession
  .builder()
  .appName("Spark SQL")
  .master("local [2]")
  .getOrCreate()
//用于隐式转换,如将RDD转换为DataFrames 
import spark.implicits._
val df = spark.read.json("/usr/data/data1.json")
df.show()

//DataFrame操作
import spark.implicits._
df.printSchema()
//树形式打印模式

df.select("xxx").show()

//20行"xxx"数据   、、

df.select($"xxx", $"ccc" + 1).show()

//21行“xxx"数据

df.filter($"ccc" > 21).show()

df.groupBy("ccc").count().show()


五、Datasets Guide
case class Person(name: String, age: Long)
val caseClassDS = Seq(Person("xxx", 00)).toDS()
caseClassDS.show()
val primitiveDS = Seq(1, 2, 3).toDS()
primitiveDS.map(_ + 1).collect() 

val path = "/usr/data/people.json"
val peopleDS = spark.read.json(path).as[Person]

peopleDS.show()

DataFrame 和 Datasets 对比 




【来自@若泽大数据】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值