spark-sql
本文用到的测试数据person.txt
lijing 29
guodegang 45
heyunwei 30
yueyunpeng 100
rdd的分区数量,读取hdfs文件,默认是文件个数
rdd生成方式:
1) 并行化
2) 通过读取文件api方法生成
DataFrame的基础操作,详见官方API文档。将DataFrame存储详见官方API文档
DataFrame生成方式:
1)从rdd生成
2)读取hive表生成
创建hive表:
1)执行hive脚本
import org.apache.spark.sql.hive.HiveContext
val sqlContext = new HiveContext(sc)
import sqlContext._
//hive的多行脚本必须分开执行,否则会报错(无法执行多行脚本)
//sql("use dev;create table person(name string,age int)") 会报错
sql("use dev") //指定数据库
sql("create table person(name string,age int)") //创建表
sql("load data local inpath 'person.txt' into table person") //导入数据
2)通过dataframe创建
import org.apache.spark.sql.hive.HiveContext
val sqlContext = new HiveContext(sc)
case class Person(name:String,age:Int)
val rdd_person=sc.textFile("example/person.txt") //此处是hdfs路径
val person=rdd_person.map(line => line.split("\t")).map(line => Person(line(0),line(1).toInt)) //创建dataframe
val hive_person = sqlContext.createDataFrame(person)
hive_person.registerTempTable("hive_person")
sqlContext.sql("use dev")
/*
创建一个managed表
如果需要指定字段进行分区,需要调用方法partitionBy(colNames: String*);
mode方法用来指定存储方式:
SaveMode.Overwrite: overwrite the existing data.
SaveMode.Append: append the data.
SaveMode.Ignore: ignore the operation (i.e. no-op).
SaveMode.ErrorIfExists: default option, throw an exception at runtime.
*/ hive_person.write.mode(org.apache.spark.sql.SaveMode.Overwrite).saveAsTable("hive_person") sqlContext.sql("select * from hive_person limit 1").collect //查看下表是否创建成功,是否有数据
在上述脚本中用到了toInt函数,如果数据有异常,无法转化为int,可自定义函数,来进行处理
def parseInt(s: String): Int = try { s.toInt } catch { case _ => 0 }
parseInt("a")
环境搭建
在idea中最后打包jar包的时候,为了避免把目标环境已有的包再打包到jar包中导致体积过大,可在pom.xml中相应的依赖中加入
<scope>provided</scope>
或在菜单File-Project Structure中将Output Layout中多余的删掉
提交jar包到spark上
spark-submit --class 类名 --jar jar包 参数
如果类里需要传参,则"--jar"要去掉,否则报错
参考:
http://www.cnblogs.com/shishanyuan/p/4699644.html
http://lxw1234.com/archives/category/spark
https://taoistwar.gitbooks.io/spark-developer-guide/content/
spark-sql的更多相关文章
- Spark SQL 之 Data Sources
#Spark SQL 之 Data Sources 转载请注明出处:http://www.cnblogs.com/BYRans/ 数据源(Data Source) Spark SQL的DataFram ...
- Spark SQL 之 DataFrame
Spark SQL 之 DataFrame 转载请注明出处:http://www.cnblogs.com/BYRans/ 概述(Overview) Spark SQL是Spark的一个组件,用于结构化 ...
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...
- Spark 官方文档(5)——Spark SQL,DataFrames和Datasets 指南
Spark版本:1.6.2 概览 Spark SQL用于处理结构化数据,与Spark RDD API不同,它提供更多关于数据结构信息和计算任务运行信息的接口,Spark SQL内部使用这些额外的信息完 ...
- Spark SQL Example
Spark SQL Example This example demonstrates how to use sqlContext.sql to create and load a table ...
- 通过Spark SQL关联查询两个HDFS上的文件操作
order_created.txt 订单编号 订单创建时间 -- :: -- :: -- :: -- :: -- :: order_picked.txt 订单编号 订单提取时间 -- :: ...
- Spark SQL 之 Migration Guide
Spark SQL 之 Migration Guide 支持的Hive功能 转载请注明出处:http://www.cnblogs.com/BYRans/ Migration Guide 与Hive的兼 ...
- Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
- Spark SQL 之 Performance Tuning & Distributed SQL Engine
Spark SQL 之 Performance Tuning & Distributed SQL Engine 转载请注明出处:http://www.cnblogs.com/BYRans/ 缓 ...
- 基于Spark1.3.0的Spark sql三个核心部分
基于Spark1.3.0的Spark sql三个核心部分: 1.可以架子啊各种结构化数据源(JSON,Hive,and Parquet) 2.可以让你通过SQL,saprk内部程序或者外部攻击,通过标 ...
随机推荐
- UNIX时间戳及日期的转换与计算
UNIX时间戳是保存日期和时间的一种紧凑简洁的方法,是大多数UNIX系统中保存当前日期和时间的一种方法,也是在大多数计算机语言中表示日期和时间的一种标准格式.以32位整数表示格林威治标准时间,例如,使 ...
- php读取memcache二进制数据
memcache作为一个数据中间层,经常用来做数据交换. 比如在某个系统内部我们规定如下的用户状态的信息,每个用户只需要存续52个字节. Key state#ID 如”state#10888” Val ...
- Cocos2d粒子系统二
粒子系统的属性: 粒子的发射速度 重力模式(模式A): 重力 方向 速度 +- 变动 切向加速度 +- 变动 径向加速度 +- 变动 半径模式(模式B): 开始半径 +- 变动 结束半径 +- 变动 ...
- 转:Raspberry Pi(树莓派)试用小记
近期入手一树莓派卡片机,体验了一下它的强大,写篇报告,推广一下哈! 机器截图: 基础参数: CPU:700 MHz, ARM11 内存:512M(还有一种是256M的) 支持GPU加速(高清视频无压力 ...
- Moving Acerage
http://zh.wikipedia.org/zh/%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87
- 布置第一个JBOSS服务器
还是要通过实践慢慢积累感觉.. SERVLET的制作,JAVAC的编译... package com.manning.jbia.intro; import java.io.IOException; i ...
- Altium Designer 14(或者其他版本)里更改PCB板(图纸)大小
1.在PCB板界面下方有一行不同颜色的图层选项,找到“Keep-Out Layer”,没看见的话点击右箭头即可找到. 2.在“Place”选项里面选择“line”,也就是添加线,把你所有元件用线条 ...
- 使用objdump objcopy查看与修改符号表
使用objdump objcopy查看与修改符号表动态库Linuxgccfunction 我们在 Linux 下运行一个程序,有时会无法启动,报缺少某某库.这时需要查看可执行程序或者动态库中的符 ...
- Java中string拼接,StringBuilder,StringBuffer和+
Java中string拼接,StringBuilder,StringBuffer和+,到底哪个更合适? StringBuilder线程不安全,效率较线程安全的StringBuffer高.jdk1.5之 ...
- Django中生成PDF(一)
Django中生成PDF(一) 需求描述: 某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成PDF并存档.PDF文件中需要有企业LOGO.文字描述等信息.其展现形式 ...