- Spark SQL比较HiveSQL
- Hive:将Hive SQL转换成MapReduce然后提交到集群上执行,简化了编写MapReduce的程序
- 由于MapReduce这种计算模型执行效率比较慢。
- Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快
- Hive:将Hive SQL转换成MapReduce然后提交到集群上执行,简化了编写MapReduce的程序
- Spark SQL应用场景
- ETL:
- Extract抽取
- 数据源:HDFS、S3、本地、关系数据库(Oracle、MySQL)、NOSQL(HBase、Cassandra)。。
- 数据类型:json、csv、xml。
- Transform清洗空值的处理、拆分数据、规范化数格式、数据替换。。。
- Load加载:存储到各种数据源中
- Extract抽取
- 分布式查询:可以作为分布式sql查询引擎,通过jdbc/odbc或指令对数据库进行分布式查询
- 结合spark streaming,处理实时数据流
- 结合MTLlib进行机器学习
- ETL:
- DataFrame
- 与RDD类似,也是一个分布式数据容器。
- DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。
- 同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。
- 从API易用性的角度上 看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。由于与R和Pandas的DataFrame类似,Spark DataFrame很好地继承了传统单机数据分析的开发体验
- DateFrame两种编程风格
- DSL风格
//查看DataFrame部分列中的内容 personDF.select(personDF.col("name")).show personDF.select(col("name"), col("age")).show personDF.select("name").show //打印DataFrame的Schema信息 personDF.printSchema //查询所有的name和age,并将age+1 personDF.select(col("id"), col("name"), col("age") + 1).show personDF.select(personDF("id"), personDF("name"), personDF("age") + 1).show
- sql风格
//如果想使用SQL风格的语法,需要将DataFrame注册成表 personDF.registerTempTable("t_person") //查询年龄最大的前两名 sqlContext.sql("select * from t_person order by age desc limit 2").show //显示表的Schema信息 sqlContext.sql("desc t_person").show
- DSL风格
Spark SQL—1—简介、应用
猜你喜欢
转载自blog.csdn.net/qq_20245089/article/details/84567349
今日推荐
周排行