一、通过结构化数据创建DataFrame:

publicstaticvoid main(String[] args) {
   SparkConf conf = new SparkConf() .setAppName("DataFrameCreate").setMaster("local");          JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(sc);
        
        DataFrame df = sqlContext.read().json("hdfs://spark1:9000/students.json");  //结构化数据直接加载为DataFrame
        
        df.show();  
    }

二、通过RDD创建DataFrame的两种创建方式

 (数据源students.txt的数据截图)

2.1通过已知类型的schema创建DataFrame,代码如下:

public static void main(String[] args) {
        SparkConf conf = new SparkConf()
            .setMaster("local")
            .setAppName("RDD2DataFrameReflection");
        JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(sc);         JavaRDD<String> lines = sc.textFile("D://students.txt");
        
        //将lines转换成 JavaRDD<Student>
        JavaRDD<Student> students = lines.map(new Function<String, Student>() {             private static final long serialVersionUID = 1L;             @Override
            public Student call(String line) throws Exception {
                // TODO Auto-generated method stub
                String[] strPlits = line.split(",");
                Student stu = new Student();
                
                stu.setId(Integer.valueOf(strPlits[]));
                stu.setName(strPlits[]);
                stu.setAge(Integer.valueOf(strPlits[]));
                
                return stu;
            }
            
        });
                
        // 使用反射方式,将RDD转换为DataFrame
        // 这里要求,JavaBean必须实现Serializable接口,是可序列化的         //根据student的schema 和 RDD创建DataFrame
        DataFrame studentsDF = sqlContext.createDataFrame(students, Student.class);
        studentsDF.show();
    }

2.2手动创建schema的方式创建DataFrame

public static void main(String[] args) {

        //...  省略创建sqlContext的过程
       JavaRDD<String> lines = sc.textFile("D://students.txt");
        
        //将普通RDD装换成JavaRDD<Row>
        JavaRDD<Row> rowRDD = lines.map(new Function<String, Row>() {             private static final long serialVersionUID = 1L;             @Override
            public Row call(String line) throws Exception {
                String[] strArray = line.split(",");
                Row row= RowFactory.create(
                        Integer.valueOf(strArray[]),    //id
                        strArray[],    //name
                        Integer.valueOf(strArray[]));    //age
            
                return row;
            }
        });
        
        //第二步 创建元类型, 即创建schema
        List<StructField> structFields = new ArrayList<StructField>();
        structFields.add(DataTypes.createStructField("id", DataTypes.IntegerType, true));  
        structFields.add(DataTypes.createStructField("name", DataTypes.StringType, true));  
        structFields.add(DataTypes.createStructField("age", DataTypes.IntegerType, true));  
        StructType structType = DataTypes.createStructType(structFields);         //根据元数据类型将JavaRDD<Row>转化成DataFrame
        DataFrame studentDF = sqlCotnext.createDataFrame(rowRDD, structType);         studentDF.show();
    }

-》DataFrame、RDD、List互转

JavaRDD<Row> rows = studentDF.javaRDD();List<Row> studentList = rows.collect(); 

三、DataFrame基本用法

        // 打印DataFrame中所有的数据(select * from ...)	df.show();
        // 打印DataFrame的元数据(Schema)
        df.printSchema();
        // 查询某列所有的数据
        df.select("name").show();  
        // 查询某几列所有的数据,并对列进行计算
        df.select(df.col("name"), df.col("age").plus()).show();
        // 根据某一列的值进行过滤
        df.filter(df.col("age").gt()).show();
        // 根据某一列进行分组,然后进行聚合
        df.groupBy(df.col("age")).count().show();
 	DataFrame studentDF = sqlCotnext.createDataFrame(rowRDD, structType);
        studentDF.show();         studentDF.registerTempTable("students"); //将DataFrame注册为零时表,取名students
        
        //对students零时表做sql查询
        DataFrame oldStudentDF = sqlCotnext.sql("select * from students where age>18");         
        oldStudentDF.show();

spark sql 基本用法的更多相关文章

  1. Spark SQL入门用法与原理分析

    Spark SQL是为了让开发人员摆脱自己编写RDD等原生Spark代码而产生的,开发人员只需要写一句SQL语句或者调用API,就能生成(翻译成)对应的SparkJob代码并去执行,开发变得更简洁 注 ...

  2. Spark SQL基本概念与基本用法

    1. Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了两个编程抽象分别叫做DataFrame和DataSet,它们用于作为 ...

  3. Spark SQL中列转行(UNPIVOT)的两种方法

    行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...

  4. Spark SQL历险记

    现在的spark sql编程通常使用scala api 以及 java api的方式,相比于直接使用 spark sql语句,spark api灵活很多,毕竟可以基于dataset以及rdd两种方式进 ...

  5. 【慕课网实战】七、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    用户:     方便快速从不同的数据源(json.parquet.rdbms),经过混合处理(json join parquet),     再将处理结果以特定的格式(json.parquet)写回到 ...

  6. Spark SQL 函数全集

    org.apache.spark.sql.functions是一个Object,提供了约两百多个函数. 大部分函数与Hive的差不多. 除UDF函数,均可在spark-sql中直接使用. 经过impo ...

  7. org.apache.spark.sql.functions汇总

    测试数据: id,name,age,comment,date 1,lyy,28,"aaa bbb",20180102020325 scala> var data = spar ...

  8. DataFrame编程模型初谈与Spark SQL

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

  9. 理解Spark SQL(二)—— SQLContext和HiveContext

    使用Spark SQL,除了使用之前介绍的方法,实际上还可以使用SQLContext或者HiveContext通过编程的方式实现.前者支持SQL语法解析器(SQL-92语法),后者支持SQL语法解析器 ...

随机推荐

  1. C语言的指针变量

    C语言的指针变量 在C语言中,变量是固定范围的存储空间,它存储的是赋给他的值, 比如: ; /* 这里是定义一个整型变量a,并把12这个值存储在a的地址空间上 这个地址空间是系统随机分配的,对用户是透 ...

  2. freebsd

    #cd /usr/ports/devel/binutils && make install

  3. 给内置对象或自定义对象添加存取器属性(getter setter)的方法总结

    funct = { get: function() { return this._x }, set: function(value) { this._x = value } } function Ob ...

  4. android 百度最新地图sdk包怎么去除 放大缩小按钮

    // 隐藏缩放控件 int childCount = mMapView.getChildCount(); View zoom = null; ; i < childCount; i++) { V ...

  5. WEB和APP谁是互联网未来

    据中国多家权威报告显示,作为多年专业化互联网公司炎帝网络科技综合评估预测,预计2016年全球互联网设备将达到100亿部.如果届时全球人口达到73亿,意味着平均每人将有1.4部设备.智能交通将增长50倍 ...

  6. 统计难题(trie树)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  7. Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)

    我们将继续一步一步动手给Python写扩展,通过上一篇我们学习了如何写扩展,本篇将介绍一些高级话题,如异常,引用计数问题等.强烈建议先看上一篇,Python之美[从菜鸟到高手]--一步一步动手给Pyt ...

  8. iOS自定义控件教程:制作一个可重用的旋钮

    当你的APP需要一些新功能时,自定义UI控件会十分有用,尤其是这些自定义控件可以在其他APP里面很好的重用.Colin Eberhart写过一篇很棒的介绍自定义UI控件的教程.这个教程涉及的是一个继承 ...

  9. C# Code Snip

    1.Tryf + TAB+TAB try { } finally { } 2.Prop+Tab+Tab public int MyProperty { get; set; } 3. #region + ...

  10. 2013 Changsha Regional 一样的木板一样的气球

    气球:      木板:   比赛现场: 场外: 曲线....  除了第一题出的太慢了,总体比成都好了很多.... 自此,今年两铜收场,再接再厉,明年要有更好的成绩.