- Spark读取的文件格式:Text文件,Json文件,Csv文件,Sequence文件,Object文件
- Spark读取的文件系统:本地文件系统、HDFS、Hbase、数据库
平时用的比较多的是:从HDFS读取,保存Text文件
一、读取Text文件
val rdd1 = sc.textFile("./words.txt")
rdd1.saveAsTextFile("hdfs://hadoop201:9000/words_output")
二、读取Json文件
- SparkSQL处理Json很方便。而使用RDD读取Json读取会很复杂。
三、读取sequence文件
SequenceFile文件是Hadoop用来存储二进制形式的key-value对儿 而设计的一种平面文件。
Spark有专门读取SequenceFile的接口,在SparkContext中,可以调用 sequenceFile[keyClass, valueClass](path)
- 注意:SequenceFile文件只针对PairRDD
sc.sequenceFile[String,int]("path")
四、从Mysql读取文件
// mysql依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
- 读mysql
val sparkConf: SparkConf = new SparkConf().setAppName("haha").setMaster("local[*]")
val sc = new SparkContext(sparkConf)
val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://hadoop201:3306/rdd"
val userName = "root"
val passwd = "000000"
val sql = "select id, name from user where id >= ? and id <= ?"
val rddrest = new JdbcRDD(
sc,
() => {
Class.forName(driver)
DriverManager.getConnection(url)
},
sql,
1, // 此处的1是sql语句中的第一个 ? 占位符的数值
3, // 此处的3是sql语句中的第二个 ? 占位符数值
3, // 查询语句在几个分区中执行,作用是避免在每个 Executor 中都查询所有的语句
(res) => { // 回调函数
println(res.getInt(1) + "," + res.getString(2))
}
)
rddrest.collect()
- 写Mysql
val sparkConf: SparkConf = new SparkConf().setAppName("haha").setMaster("local[*]")
val sc = new SparkContext(sparkConf)
val driver = "com.mysql.jdbc.Driver"
val url = "jdbc:mysql://hadoop201:3306/rdd"
val userName = "root"
val passwd = "000000"
val rdd: RDD[(Int, String, Int)] = sc.makeRDD(Array((1,"a",10),(2,"b",20),(3,"c",30)))
rdd.foreachPartition(datas=>{
// 每个分区生成一个jdbc连接
Class.forName(driver)
val conn: Connection = DriverManager.getConnection(url,userName,passwd)
val statement: PreparedStatement = conn.prepareStatement("insert into user values(?,?,?)")
datas.foreach(data=>{ // 此处的foreach不是RDD的算子,而是datas集合的方法,所以不会发生序列化异常
statement.setInt(1,data._1)
statement.setString(2,data._2)
statement.setInt(3,data._3)
statement.executeUpdate()
})
statement.close()
conn.close()
})
}
五、读写Hbase
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-server</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.1</version>
</dependency>
- 读Hbase
- 写Hbase