小记--------sparksql和DataFrame的小小案例java、scala版本

sparksql是spark中的一个模块,主要用于进行结构化数据的处理,他提供的最核心的编程抽象,就是DataFrame。同时,sparksql还可以作为分布式的sql查询引擎。 最最重要的功能就是从hive中查询数据。

    Dataframe可以理解为:以列的形式组织的,分布式的数据集合。

    Dataframe可以通过很多来源进行构建,包括:结构化的数据文件、hive中的表、外部的关系型数据库、以及RDD

 

使用sparksql 首先需要创建一个sqlContext对象,或者是它的子类的对象(hiveContext的对象)

Java版本

package cn.spark.study.sql;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.SQLContext;

/**
* 创建dataframe
*/
public class DataFrameCreate {
    public static void main (String[] args){
        SparkConf conf = new SparkConf()
                .setAppName("DataFrameCreate")
                .setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(sc);
        sqlContext.read().json("hdfs://spark1:9000/test.json").show();
    }
}

//=======================分隔符======================================

package cn.spark.study.sql;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SQLContext;
/**
* dataframe常用操作
*/
public class DataFrameOperation {
    public static void main(String [] args){
        // 创建DataFrame
        SparkConf conf = new SparkConf()
                .setAppName("DataFrameCreate");
        JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(sc);

        // 创建出来的DataFrame完全可以理解为一张表
        Dataset<Row> json = sqlContext.read().json("hdfs://spark1:9000/students.json");
        //打印dataframe ;select * from 表名
        json.show();
        //打印dataframe的元数据信息(schema)
        json.printSchema();
        //查询某一列的数据
        json.select("name").show();
        //查询多列 name ,age 并对所有的age列的结果值加1
        json.select(json.col("name") , json.col("age").plus(1)).show();
        //对某一列的值进行过滤;eg:只展示age字段值大于18的数据
        json.select(json.col("age").gt(18)).show();
        //根据某一列进行分组,并聚合;eg:通过age分组,并求出每组的个数
        json.groupBy("age").count().show();
    }
}

Scala版本

package cn.spark.study.sql

import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}

/**
  * 创建 dataframe
  */
object DataFrameCreateScala {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
      .setMaster("dataFramecreate")
      .setAppName("local")

    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)

    sqlContext.read.json("hdfs://spark1/test.json").show()
  }
}

===================================分隔符========================================
package cn.spark.study.sql

import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}

/**
  * dataframe的常用操作
  */
object DataframeOperation {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
      .setAppName("dataframeOperation")
      .setMaster("local")
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    val df = sqlContext.read.json("hdfs://spark1:9000/text.json")

    //打印dataframe
    df.show()
    //打印dataframe的schema
    df.printSchema()
    //查询某一列的数据
    df.select("name").show()
    //查询多列数据并进行计算;eg:查询name,age列,并对age列的值+1
    df.select(df("name") , df("age")+1).show()
    //查询某列并对其过滤;eg:查询age列并且值大于18
    df.select(df("age").gt(18)).show()
    df.select(df("age")>18).show()
    //对某一列进行分组,并对分组后的结果进行求个数
    df.groupBy(df("age")).count().show()
  }
}

原文地址:https://www.cnblogs.com/yzqyxq/p/12054371.html

时间: 2024-11-06 09:33:49

小记--------sparksql和DataFrame的小小案例java、scala版本的相关文章

SparkSql官方文档中文翻译(java版本)

1 概述(Overview) 2 DataFrames 2.1 入口:SQLContext(Starting Point: SQLContext) 2.2 创建DataFrames(Creating DataFrames) 2.3 DataFrame操作(DataFrame Operations) 2.4 运行SQL查询程序(Running SQL Queries Programmatically) 2.5 DataFrames与RDDs的相互转换(Interoperating with RDD

_00017 Kafka的体系结构介绍以及Kafka入门案例(初级案例+Java API的使用)

博文作者:妳那伊抹微笑 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前,妳却感觉不到我的存在 技术方向:Flume+Kafka+Storm+Redis/Hbase+Hadoop+Hive+Mahout+Spark ... 云计算技术 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作! qq交流群:214293307  (期待与你一起学习,共同进步) # Kfaka的体系结构 # 学习前言 Kafka的整个学习过程就是自己看官网的文档,出

【sparkSQL】DataFrame的常用操作

scala> import org.apache.spark.sql.SparkSession import org.apache.spark.sql.SparkSession scala> val spark=SparkSession.builder().getOrCreate() spark: org.apache.spark.sql.SparkSession = [email protected] //使支持RDDs转换为DataFrames及后续sql操作 scala> impo

【Flink】Flink基础之WordCount实例(Java与Scala版本)

简述 WordCount(单词计数)作为大数据体系的标准示例,一直是入门的经典案例,下面用java和scala实现Flink的WordCount代码: 采用IDEA + Maven + Flink 环境:文末附 pom 文件和相关技术点总结: Java批处理版本 import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.DataSet; import org.apa

切换Java jdk版本脚本

电脑上须安装需要互相切换版本的JDK,不能用绿色包代替.复制以下内容至新建的文本文件,后缀再修改为bat格式,右击已管理员身份运行 @echo off rem 切换Java jdk版本 echo 请以管理员来进行切换 echo 当前版本 java -version :menu echo ============================================= echo 请选择要切换的jdk版本 echo 1:Java jdk 1.7 echo 2:Java jdk 1.8 ec

java三大版本解析

JAVA三大版本代表着JAVA技术的三个应用领域:JAVASE.JAVAME.JAVAEE. JAVA以前很长一段时间被称为JAVA2,所以现在很多人习惯称为J2SE.J2ME.J2EE,它们表示的含义是一样的. 首先我们来看看JAVASE,它是JAVA的标准版,是整个JAVA的基础和核心,也是JAVAEE和JAVAME技术的基础,主要用于开发桌面应用程序. 然后我们来看看JAVAME,它叫做JAVA的微缩版,主要应用于嵌入式开发,比如手机程序的开发. JAVAEE叫做JAVA的企业版,它提供了

Atitit..jdk&#160;java&#160;各版本新特性&#160;1.0&#160;1.1&#160;1.2&#160;1.3&#160;1.4&#160;1.5(5.0)&#160;1.6(6.0)&#160;7.0&#160;8.0&#160;9.0&#160;attilax&#160;大总结

Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 1.2. Java版本:JDK 1.02 1.3. Java版本:JDK 1.13 1.4. Java版本:JDK 1.2 (Java 2)4 1.4.1. 1999年5 1.4.2. 2000年5 1.5. Java版本:JDK 1.35 1.5.1. 2001年6 1.5.2. 2002年7

什么是函数响应式编程(Java&amp;Android版本)

什么是函数响应式编程(Java&Android版本) 原文链接:http://www.bignerdranch.com/blog/what-is-functional-reactive-programming/ 函数响应式编程(FRP)为解决现代编程问题提供了全新的视角.一旦理解它,可以极大地简化你的项目,特别是处理嵌套回调的异步事件,复杂的列表过滤和变换,或者时间相关问题. 我将尽量跳过对函数响应式编程学院式的解释(网络上已经有很多),并重点从实用的角度帮你理解什么是函数响应式编程,以及工作中

Android4.0-4.4 添加实体按键振动支持的方法(java + smali版本)

有些手机比如泛泰A820L, 泛泰A890 A900 以及Nubia Z5S 和Z5S mini具有实体按键(这里所说的实体按键是相对于虚拟按键而言, 包含物理按键和触摸屏上多出来的触摸实体按键), 当编译第三方ROM比如CM或者Mokee或者Omni时就会发现如果不做修改的话默认触摸实体按键时是没有振动支持的, 甚至有些patchrom的MIUI或者ColorOS等系统也可能不支持. 不知道是CM代码的问题还是编译的Config没写完全造成的, 后来经过本人修改后是可以支持按键振动, 不过只能