web-dev-qa-db-ja.com

RDDを初期化して空にします

というRDDがあります

JavaPairRDD<String, List<String>> existingRDD; 

ここで、このexistingRDDを空に初期化して、実際のrddを取得したときに、このexistingRDDと結合できるようにする必要があります。 existingRDDをnullに初期化する以外は、空のRDDに初期化するにはどうすればよいですか?ここに私のコードがあります:

JavaPairRDD<String, List<String>> existingRDD;
if(ai.get()%10==0)
{
    existingRDD.saveAsNewAPIHadoopFile("s3://manthan-impala-test/kinesis-dump/" + startTime + "/" + k + "/" + System.currentTimeMillis() + "/",
    NullWritable.class, Text.class, TextOutputFormat.class); //on worker failure this will get overwritten                                  
}
else
{
    existingRDD.union(rdd);
}
17

Javaで空のRDDを作成するには、次のようにします。

// Get an RDD that has no partitions or elements.
JavaSparkContext jsc;
...
JavaRDD<T> emptyRDD = jsc.emptyRDD();

ジェネリックの使用方法を知っていると確信しています。それ以外の場合は、次のものが必要です。

JavaRDD<Tuple2<String,List<String>>> emptyRDD = jsc.emptyRDD();
JavaPairRDD<String,List<String>> emptyPairRDD = JavaPairRDD.fromJavaRDD(
  existingRDD
);

mapToPairメソッドを使用して、JavaRDDJavaPairRDDに変換することもできます。

Scalaで:

val sc: SparkContext = ???
... 
val emptyRDD = sc.emptyRDD
// emptyRDD: org.Apache.spark.rdd.EmptyRDD[Nothing] = EmptyRDD[1] at ...
25
eliasah
val emptyRdd=sc.emptyRDD[String]

上記のステートメントは、Stringタイプの空のRDDを作成します

SparkContextクラスから:

パーティションまたは要素のないRDDを取得する

def emptyRDD[T: ClassTag]: EmptyRDD[T] = new EmptyRDD[T] (this)
2

Scalaでは、「parallelize」コマンドを使用しました。

val emptyRDD = sc.parallelize(Seq(""))
0
이동준

Javaで、次のように空のペアRDDを作成します。

JavaPairRDD<T, T> emptyPairRDD = JavaPairRDD.fromJavaRDD(SparkContext.emptyRDD());
0
Satya

@eliasahの回答は非常に便利です。空のペアRDDを作成するコードを提供しています。空のペアRDD(キー、値)を作成する必要があるシナリオを考えます。次のscalaコードは、キーを文字列、値をIntとして空のペアRDDを作成する方法を示しています。

type pairRDD = (String,Int)
var resultRDD = sparkContext.emptyRDD[pairRDD]

RDDは次のように作成されます。

resultRDD: org.Apache.spark.rdd.EmptyRDD[(String, Int)] = EmptyRDD[0] at emptyRDD at <console>:29
0
Nikhil Bhide

Javaでは、空のRDDの作成は少し複雑でした。 scala.reflect.classTagを使用してみましたが、どちらも機能しません。多くのテストの後、動作するコードはさらにシンプルになりました。

private JavaRDD<Foo> getEmptyJavaRdd() {

/* this code does not compile because require <T> as parameter into emptyRDD */
//        JavaRDD<Foo> emptyRDD = sparkContext.emptyRDD();
//        return emptyRDD;

/* this should be the solution that try to emulate the scala <T> */
/* but i could not make it work too */
//        ClassTag<Foo> tag = scala.reflect.ClassTag$.MODULE$.apply(Foo.class);
//        return sparkContext.emptyRDD(tag);

/* this alternative worked into Java 8 */
    return SparkContext.parallelize(
            Java.util.Arrays.asList()
    );

}
0
Thiago Mata