Sparkコアプログラミング-RDD作成操作


現在、2つのタイプのベースRDDがあります.1つはパラレルセット(Parallelized Collections)であり、すでに存在するscalaセットを受信し、その後、様々なパラレル計算を行います.もう1つは外部ストレージから作成されたRDDであり、外部ストレージはテキストファイルまたはHDFSであってもよいし、HadoopのインタフェースAPIであってもよい.
一、並列化集合作成操作
SparkContextのparallelizeメソッドにより,既に存在するscala集合上に作成されたSeqオブジェクトは,集合のオブジェクトがコピーされ,並列に動作可能な分散データセット(RDD)が作成される.SparkContextクラスではparallelizeとmakeRDDの2つの並列化セット作成操作が実現されています.
  • parallelize(seq:Seq[T], numSlices:Int = defaultParallelisem):RDD[T]
  • //   SparkConf  
    SparkConf conf = new SparkConf().setAppName(appName).setMaster(master);
    //   JavaSparkContext  
    JavaSparkContext sc = new JavaSparkContext(conf);
    //     List  
    List data = Arrays.asList(1, 2, 3, 4, 5);
    //        RDD,          ,         
    JavaRDD distData = sc.parallelize(data, 10);
  • makeRDD(seq:Seq[(T, Seq[String])]):RDD[T]
  • makeRDD(seq:Seq[T], numSlices:Int = defaultParallelisem):RDD[T]
  • //    parallelize  ,                   。(  Scala Api      )
    
    //   1 10      master  ,11 15      slave1 slave2  
    var collect = Seq((1 to 10, Seq("master")), (11 to 15, Seq("slave1","slave2")))
    var rdd = sc.makeRDD(collect)
    
    //     1     
    rdd.preferredLocations(rdd.partitions(0))

    二、外部ストレージ作成操作
    Sparkは、Hadoopがサポートするストレージリソースを、ローカルファイル、HDFS、Cassandra、HBAseなどのRDDに変換することができ、Sparkはテキストファイル、Sequence Files、およびHadoop InputFormatフォーマットをサポートする.
  • textFile(path:String, minPartitions:Int = defaultMinPartitions):RDD[String]

  • textFile操作を使用すると、ローカルファイルまたはHDFSファイルをRDDに変換できます.この操作は、textFile(「/my/directory」)などのファイルディレクトリ全体の読み取りをサポートします.ファイルは、テキストまたは圧縮ファイルであってもよい.注意すべき点は2つあります.すべてのノードがファイルにアクセスできる必要があります.そうしないと、実行中に「FileNotFoundException」と報告されます.2デフォルトでは、各データブロックに1つのパーティションを割り当て、ユーザーが表示するより多くのパーティションを指定することもできますが、HDFSファイルのデータブロック数を少なくすることはできません.
    //      data.txt  RDD
    JavaRDD distFile = sc.textFile("data.txt");

    注意:textFileはパーティションをサポートし、モードマッチングをサポートします.例えば、D:wordcountディレクトリの下のtempの先頭の給をRDDに変換します.
    JavaRDD distFile = sc.textFile("D:\\wordcount\\temp*");

    複数のパスをカンマで区切るには、次のようにします.
    JavaRDD distFile = sc.textFile("D:\\wordcount\\temp1,D:\\wordcount\\temp2",4);