sparkSQL和DataFrame的简单介绍
sparkSQL
1 spark中原生的RDD是没有数据结构的
2 对RDD的变换和操作是不能采用传统的SQL方法
3 sparkSQL应运而生并建立在shark上,伯克利实验室spark生态环境的组件之一
4 shark最初很大程度上以来HIVE图语法解析器,查询优化器等
5 改进的spark SQL框架摆脱了对HIVE的依赖性,所以无论在数据兼容、性能优化、组件扩展方面都是得到了极大的方便
spark SQL的优势
1 数据兼容:数据结果集本身就是sparkRDD。spark sql可兼容HIVE,JSON和parquet等文件。并可获取RDBMS数据以及访问cassandra等NOSQL数据文件
2 性能优化:除了采取 In-Memory Columnar Storage、byte-code generation等优化技术外、将会引进Cost Model对查询进行动态评估、获取最佳物理计划等等;
3 组件扩展:sql的语法解析器、分析器还是优化其都重新定义进行扩展如HIVE SQL
SparkSQL运行架构
1 对读入的SQL语句进行解析(Parse),分辨出SQL语句的关键词(如SELECT,FROM,WHERE)并判断SQL语句的合法性;
2 将SQL语句和数据库的数据字典进行绑定(Bind)如果相关的projection(映射)、Data Source(数据源)等是存在的话,就表示这个SQL语句是可以执行的;
3 数据库会在这个计划中选择一个最优计划(Optimize)
4 计划执行(Execute),按照 最优计划(Optimize)>数据源(Data Source)>结果(Result) 的次序来进行的,在执行过程中有时候不需要读取物理表就可以返回结果,如重新运行刚才的SQL语句,可能直接从数据库的缓存池中获取返回结果。
实现Spark SQL
1 产生schema RDD :为了实现sparksql必须将一般的RDD转换成带数据结构的数据集DataFrame
2 schema RDD本身就是一个RDD,但它本身包含是由想对象(Row Object)组成。每个对象代表一条记录
3 schemaRDD提供了一些新的操作引用函数是的数据操作和分析更搞笑和简洁
4 可以将schemaRDD注册成表。这样可以用SQL访问RDD的数据了。而结果集本身也是schema RDD,即DataFrame
5 可以用各种方法生成schemaRDD
1)createDataFrame产生DataFrame
2)用scparallelize产生DataFrame
DataFrame如何转换成SQL语句
需要注册零时表:df.registerTempTable('表名')
产生DataFrame的方法
1 由以存在的RDD产生schemaRDD有两种方法
1) 从行对象推出数据结构并安插到元RDD上已形成SchemaRDD即DataFrame
2) 用编程的方法产生数据结构并用在DataFrame生成函数的参数中以形成schema RDD
2 读入json,parquet,AVRO或CSV文件时直接读成schema RDD,这是因为这些文件本身就是带有结构的
3 将python或R的DataFrame转换成spark中的。这些APIschemaRDD
注意:如果在DataFrame上使用SQL必须将它注册成表。当然spark DataFrame 有自己的一套数据操作和分析APIs。这些APIs类似于PYTHON pandas 中的DataFrame 方法
从行对象推出数据结构方法:
编程方法:
读入文件直接产生结构:如JSON:
其他诸如parquet、csv等只需要吧json换成相应的文件就行了。
注:python的DATAFRAME可以直接被转换成SPARK DATAFRAME