欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spark SQL编程动手实战-01

程序员文章站 2022-04-01 20:05:00
...

首先创建SparkContext上下文:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

接着引入隐身转换,用于把RDD转成SchemaRDD:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

接下来定义一个case class 来用于描述和存储SQL表中的每一行数据:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

接下来要加载数据,这里的测试数据是user.txt文件:

我们创建好use.txt增加内容并上传到hdfs中:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

web控制台查询:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

hdfs命令查询:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

 

加载数据:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

验证数据是否加载成功:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

 

注册成为user的table:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

 

此刻user还是一个MappedRDD:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

执行age 大于13 小于19的SQL查询:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

此刻的teenagers已经隐身转换成SchemaRDD

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

通过collect操作触发job的提交和执行:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

结果:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

 

DSL是Domain Specific Language的缩写,使用DSL我们可以直接基于读取的RDD数据进行SQL操作,无需注册成Table。

我们重新启动下spark-shell:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

 

同样使用"user.txt"的数据:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

验证user:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

 

我们这次直接使用SQL查询操作:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

 

使用toDebugString查看下结果:

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

可以发现使用DSL的使用teenagers在内部已经被隐身转换了SchemaRDD的实例

spark SQL编程动手实战-01
            
    
    博客分类: spark SQLContextcase classregisterAsTableSchemaRDDDSL 

 

可以发现与前面那张注册Table方式的结果是一样的