spark sql DataFrame操作

spark sql DataFrame操作

官网地址(http://spark.apache.org/docs/latest/sql-programming-guide.html)

1、Spark SQL是干什么用的吗?具体包括哪些呢?

2、DataFrame有哪些操作呢?


不多说,先实践后理论

下面分别用Java语言及scala语言实现:

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

object DataFrameOperation {
def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
        .setAppName("DataFrameCreate")  
    val sc = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)
    val df = sqlContext.read.json("hdfs://cloud1:9000/a.json") 
    df.show()
    df.printSchema()
    df.select("name").show()
    df.select(df("name"), df("age") + 1).show()
    df.filter(df("age") > 18).show()
    df.groupBy("age").count().show()
}
}

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

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其实可以看成一张表
	DataFrame df = sqlContext.read().json("hdfs://cloud1:9000/a.json"); 

	// 打印DataFrame中所有的数据(select * from ...)
	df.show();
	
	// 打印DataFrame的元数据(Schema)
	df.printSchema();
	
	 查询某列所有的数据
	df.select("name").show();
	
	// 查询某几列所有的数据,并对列进行计算
	df.select(df.col("name"), df.col("age").plus(1)).show();
	
	//根据某一列的值进行过滤
	df.filter(df.col("age").gt(17)).show();
	
	// 根据某一列进行分组,然后进行聚合
	df.groupBy(df.col("age")).count().show();
	
}
}


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


DataFrame,可以理解为是,以列的形式组织的,分布式的数据集合。它其实和关系型数据库中的表非常类似,但是底层做了很多的优化。DataFrame可以通过很多来源进行构建,包括:结构化的数据文件,Hive中的表,外部的关系型数据库,以及RDD。

要使用Spark SQL,首先就得创建一个创建一个SQLContext对象,或者是它的子类的对象,比如HiveContext的对象。


Java版本:
JavaSparkContext sc = ...; 
SQLContext sqlContext = new SQLContext(sc);


Scala版本:
val sc: SparkContext = ... 
val sqlContext = new SQLContext(sc)
import sqlContext.implicits._

除了基本的SQLContext以外,还可以使用它的子类——HiveContext。HiveContext的功能除了包含SQLContext提供的所有功能之外,还包括了额外的专门针对Hive的一些功能。这些额外功能包括:使用HiveQL语法来编写和执行SQL,使用Hive中的UDF函数,从Hive表中读取数据。


要使用HiveContext,就必须预先安装好Hive,SQLContext支持的数据源,HiveContext也同样支持——而不只是支持Hive。对于Spark 1.3.x以上的版本,都推荐使用HiveContext,因为其功能更加丰富和完善。


Spark SQL还支持用spark.sql.dialect参数设置SQL的方言。使用SQLContext的setConf()即可进行设置。对于SQLContext,它只支持“sql”一种方言。对于HiveContext,它默认的方言是“hiveql”。


Java版本
DataFrame df = sqlContext.read().json("hdfs://cloud1:9000/a.json");
df.show();
df.printSchema();
df.select("name").show();
df.select(df.col("name"), df.col("age").plus(1)).show();
df.filter(df.col("age").gt(21)).show();
df.groupBy("age").count().show();


Scala版本
val df = sqlContext.read.json("hdfs://cloud1:9000/a.json")
df.show()
df.printSchema()
df.select("name").show()
df.select(df("name"), df("age") + 1).show()
df.filter(df("age") > 21).show()
df.groupBy("age").count().show()

后面再讲HiveContext!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值