Spark修炼之道(进阶篇)——Spark入门到精通:第八节 Spark SQL与DataFrame(一)
Spark SQL是Spark的五大核心模块之一,用于在Spark平台之上处理结构化数据,利用Spark SQL可以构建大数据平台上的数据仓库,它具有如下特点:
(1)能够无缝地将SQL语句集成到Spark应用程序当中
(2)统一的数据访问方式
DataFrames and SQL provide a common way to access a variety of data sources, including Hive, Avro, Parquet, ORC, JSON, and JDBC. You can even join data across these sources.
(3) 兼容Hive
(4) 可采用JDBC or ODBC连接
具体见:http://spark.apache.org/sql/
关于Spark SQL的运行原理可参见:http://blog.csdn.net/book_mmicky/article/details/39956809,文章写得非常好 ,这里不再赘述,在此向作者致敬
DataFrames在Spark-1.3.0中引入,主要解决使用Spark RDD API使用的门槛,使熟悉R语言等的数据分析师能够快速上手Spark下的数据分析工作,极大地扩大了Spark使用者的数量,由于DataFrames脱胎自SchemaRDD,因此它天然适用于分布式大数据场景。相信在不久的将来,Spark将是大数据分析的终极归宿。
在Spark中,DataFrame是一种以RDD为基础的分布式数据集,与传统RDBMS的表结构类似。与一般的RDD不同的是,DataFrame带有schema元信息,即DataFrame所表示的表数据集的每一列都带有名称和类型,它对于数据的内部结构具有很强的描述能力。因此Spark SQL可以对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率。
DataFrames具有如下特点:
(1)Ability to scale from kilobytes of data on a single laptop to petabytes on a large cluster(支持单机KB级到集群PB级的数据处理)
(2)Support for a wide array of data formats and storage systems(支持多种数据格式和存储系统,如图所示)
(3)State-of-the-art optimization and code generation through the Spark SQL Catalyst optimizer(通过Spark SQL Catalyst优化器可以进行高效的代码生成和优化)
(4)Seamless integration with all big data tooling and infrastructure via Spark(能够无缝集成所有的大数据处理工具)
(5)APIs for Python, Java, Scala, and R (in development via SparkR)(提供Python, Java, Scala, R语言API)
本节部分内容来自:http://spark.apache.org/docs/latest/sql-programming-guide.html#dataframes
将people.json上传到HDFS上,放置在/data目录下,people.json文件内容如下:
scala val df = sqlContext.read.json("/data/people.json") df: org.apache.spark.sql.DataFrame = [age: bigint, name: string] //显示DataFrame完整信息 scala df.show() +----+-------+ | age| name| +----+-------+ |null|Michael| | 30| Andy| | 19| Justin| +----+-------+
//执行SparkSQL scala val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age = 13 AND age = 19") teenagers: org.apache.spark.sql.DataFrame = [name: string, age: bigint] //结果格式化输出 scala teenagers.map(t = "Name: " + t(0)).collect().foreach(println) Name: Justin
旧版Spark(1.6版本) 将RDD动态转为DataFrame 旧版本spark不能直接读取csv转为df,没有spark.read.option(“header”, “true”).csv这么简单的方法直接将第一行作为df的列名,只能现将数据读取为rdd,然后通过map和todf方法转为df,如果csv(txt)的列数很多的话用如(1,2,…,n),即创建元组很麻烦,本文解决如何用旧版spark读取多列txt文件转为df
相关文章
- MySQL_(Java)使用preparestatement解决SQL注入的问题
- linq to sql 三层架构中使用CRUD操作
- SQL Tune Report–sqltrpt.sql
- SQL Server解决孤立用户浅析
- sql 语句系列(列举非索引外键)[八百章之第九章]
- [SQL] 用SQL语句检查CPU和磁盘空间
- 【Teradata SQL】数据库中查询 一个字段包含另一个字段sql
- Spark修炼之道(进阶篇)——Spark入门到精通:第十三节 Spark Streaming—— Spark SQL、DataFrame与Spark Streaming
- Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
- Python Django通过牵引文件查看建表sql语句的命令sqlmigrate
- spark安装须知:SPARK_DIST_CLASSPATH配置
- Spark SQLTransformer SQL转换
- Atitit sql查询语法 SQL SELECT完整语法3 1.SELECT语法3 2.FROM子句5 3.WHERE子句6 下面两张表将在后面使用到7 1.比较运算符7 2.逻辑
- 【异常】Error querying database. Cause: java.sql.SQLException: No value specified for parameter 1
- Hive on Spark和Spark sql on Hive,你能分的清楚么
- mysql - 报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled
- 【ClickHouse SQL 极简教程】使用物化字段投影 PROJECTION 提升性能
- SQL的组合查询
- Oracle PL/SQL中的循环处理(sql for循环)
- SQL SUM() 函数
- Spark实战(五)spark streaming + flume(Python版)
- 在与SQL Server建立连接时出现与网络相关的或特定于实例的错误