zoukankan      html  css  js  c++  java
  • DataFrame编程模型初谈与Spark SQL

      Spark SQL在Spark内核基础上提供了对结构化数据的处理,在Spark1.3版本中,Spark SQL不仅可以作为分布式的SQL查询引擎,还引入了新的DataFrame编程模型。

      在Spark1.3版本中,Spark SQL不再是Alpha版本,除了提供更好的SQL标准兼容之外,还引进了新的组件DataFrame。同时,Spark SQL数据源API也实现了与新组件DataFrame的交互,允许用户直接通过Hive表、Parquet文件以及一些其他数据源生成DataFrame。用户可以在同一个数据集上混合使用SQL和DataFrame操作符。新版本还提供了从JDBC读写表的能力,可以更原生地支持Postgres、MySQL及其他RDBMS系统。

      Spark SQL所有功能的入口点是SQLContext,或它的一个子类。只需要一个SparkContext实例就可以构建一个基本的SQLContext。

    package cn.spark.study.sql

    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    import org.apache.spark.sql.SQLContext

    /**
    * @author Administrator
    */
    object DataFrameCreate {

    def main(args: Array[String]) {
    val conf = new SparkConf()
    .setAppName("DataFrameCreate")
    .setMaster("local");
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)

    // val df = sqlContext.read.json("hdfs://spark1:9000/students.json")//从hdfs

    // val df = sqlContext.read.json("./data/people.json")
    val df = sqlContext.read.json("./data/aa.json")
    //Spark DataFrame小试牛刀,见https://segmentfault.com/a/1190000002614456
    //Spark DataFrames入门指南:创建和操作DataFrame,见http://blog.csdn.net/lw_ghy/article/details/51480358
    //创建dataframe ,就是把数据 和数据元封装一起 形成一个数据表。
    //spark DataFrame用法,见http://blog.csdn.net/dreamer2020/article/details/51284789
    //RDD与DataFrame的转换,见http://www.cnblogs.com/namhwik/p/5967910.html

    df.show()

    }

    }

    //输入
    //{"name":"Michael"}
    //{"name":"Andy", "age":30}
    //{"name":"Justin", "age":19}


    //输出
    //+----+-------+
    //| age| name|
    //+----+-------+
    //|null|Michael|
    //| 30| Andy|
    //| 19| Justin|
    //+----+-------+


    //输入
    //{"name":"中国","provinces":[{"name":"黑龙江","citys":["佳木斯","大庆","哈尔滨","齐齐哈尔","牡丹江"]},{"name":"辽宁","citys":["沈阳","大连","盘锦"]},{"name":"吉林","citys":["吉林市","长春市","四平市"]}]}


    //输出
    //+----+--------------------+
    //|name| provinces|
    //+----+--------------------+
    //| 中国|[[WrappedArray(佳木...|
    //+----+--------------------+

      再次强调,spark-shell除了帮我们构建了SQLContext实例外,还帮我们导入了隐式转换:import sqlContext.implicits._。在以spark-submit方式提交的应用程序中,需要手动导入该隐式转换才能访问某些API。

      DataFrame编程模型极大地简化了Spark SQL的编程复杂度。

      Spark SQL允许Spark执行用SQL语言,HiveQL语言或者Scala语言表示的关系查询。在Spark1.3之前,这个模块的核心是SchemaRDD类型。SchemaRDD由行(Row)对象组成,行对象通过scheme来描述行中每一列的数据类型。

      而在Spark1.3中,开始引入了DataFrame来重命名SchemaRDD类型,在Spark1.3中,DataFrame是一个以命名列方式组织的分布式数据集,在概念上类似于关系型数据库中的一个表,也相当于R/Python中的Dta Frames。DataFrame可以由结构化数据文件转换得到,或从Hive中的表得来,也可以转换自外部数据库或现有的RDD

      DataFrame编程模型具有的功能特性有:

      1、从KB到PB级的数据量支持

      2、多种数据格式和多种存储系统支持

      3、通过Spark SQL的Catalyst优化器进行先进的优化,生成代码

      4、位Python、Java、Scala和R语言(Spark R)提供API。

  • 相关阅读:
    13.ng-value
    Android 下使用 JSON 实现 HTTP 请求,外加几个示例!
    PHP完整的AES加解密算法使用及例子(256位)
    常用对称加密算法(DES/AES)类(PHP)
    随机字符串生成算法
    JAVA实现AES加密
    Base64的好处
    什么是VC、PE、LP、GP?
    mysql update操作
    iOS开发:用DES对字符串加解密
  • 原文地址:https://www.cnblogs.com/zlslch/p/6128247.html
Copyright © 2011-2022 走看看