Spark RDD之三种创建方式

使用三种方式创建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))
  }
}
发布了491 篇原创文章 · 获赞 435 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/lixinkuan328/article/details/104526495