使用三种方式创建RDD
- 使用SparkContext的parallelize()方法序列化本地数据集合创建RDD。
- 使用外界的数据源创建RDD,比如说本地文件系统,分布式文件系统HDFS等等。
- 通过将已有RDD使用transform算子操作产生新的RDD。
三种方式创建RDD--Java
/**
* 三种方法创建RDD演示Java版本
*/
public class CreateRDDJava {
public static void main(String[] args) {
SparkConf conf = new SparkConf()
.setAppName("CreateRDDJava")
.setMaster("local")
// 创建SparkContext
JavaSparkContext sc = new JavaSparkContext(conf);
/**
* 方式一:使用JavaSparkContext的parallelize方法
* 将集合序列化,本地创建RDD
*/
List<String> lineWord = new ArrayList<String>();
lineWord.add("hello hadoop hello spark");
// 创建RDD
JavaRDD<String> lineWordRDD = sc.parallelize(lineWord);
// 打印RDD里的内容
lineWordRDD.foreach(new VoidFunction<String>() {
public void call(String word) throws Exception {
System.out.println(word);
}
});
/**
* 方式二:使用外部数源创建RDD
*/
// 一般而言这里的外部数据源地址是外部共享文件系统如HDFS
// 这里因为只是在本地演示创建RDD不打包代码上集群因而是本地的路径
JavaRDD<String> textRDD = sc.textFile("file:///C:\\Users\\XJH\\Desktop\\test\\22.txt");
// 打印RDD内容
textRDD.foreach(new VoidFunction<String>() {
public void call(String text) throws Exception {
System.out.println(text);
}
});
/**
* 方式三:通过其他已有RDD通过高阶变换而来
*/
// 这里使用lineWordRDD进行演示
// 使用flatMap算子对其进行变换,按空格分割字符串得到含有若干个单词的新RDD
JavaRDD<String> wordsRDD = lineWordRDD.flatMap(
new FlatMapFunction<String, String>() {
public Iterator<String> call(String lineWord) {
return Arrays.asList(lineWord.split(" ")).iterator();
}
});
// 将切割后的RDD内容进行打印
wordsRDD.foreach(new VoidFunction<String>() {
public void call(String word) throws Exception {
System.out.println(word);
}
});
}
}
三种方式创建RDD--Scala
/**
* 三种方式创建RDD演示Scala版本
*/
object CreateRDDScala {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
.setAppName("CreateRDDScala")
.setMaster("local")
.set("spark.testing.memory", "2147480000")
// 创建SparkContext
val sc = new SparkContext(conf)
/**
* 方式一:使用JavaSparkContext的parallelize方法
* 将集合序列化,本地创建RDD
*/
val lineWord = Array("hello word hello spark")
// 序列化创建RDD
val lineWordRDD = sc.parallelize(lineWord)
// 打印RDD的内容
lineWordRDD.foreach(line => println(line))
/**
* 方式二:使用外部数据源创建RDD
*/
// 一般而言这里的外部数据源地址是外部共享文件系统如HDFS
// 这里因为只是在本地演示创建RDD不打包代码上集群因而是本地的路径
val textRDD = sc.textFile("file:///C:\\Users\\XJH\\Desktop\\test\\22.txt")
// 打印RDD的内容
textRDD.foreach(text => println(text))
/**
* 方式三:通过其他已有RDD通过高阶变换而来
*/
// 这里使用lineWordRDD进行演示
// 使用flatMap算子对其进行变换,按空格分割字符串得到含有若干个单词的新RDD
val wordsRDD = lineWordRDD.flatMap(line => line.split(" "))
// 打印RDD的内容
wordsRDD.foreach(word => println(word))
}
}