web-dev-qa-db-fra.com

Initialiser un RDD pour vider

J'ai un RDD appelé

JavaPairRDD<String, List<String>> existingRDD; 

Maintenant, j'ai besoin d'initialiser ceci existingRDD à vider pour pouvoir créer une union avec ce existingRDD..__ lorsque j'obtiens les RDD réels. Comment initialiser existingRDD à un RDD vide sauf en l'initialisant à null? Voici mon code:

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);
}
16

Pour créer un RDD vide dans Java , procédez comme suit:

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

J'espère que vous savez utiliser les génériques, sinon, vous aurez besoin de:

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

Vous pouvez également utiliser la méthode mapToPair pour convertir votre JavaRDD en JavaPairRDD.

Dans Scala :

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

L'instruction ci-dessus créera un RDD vide avec String Type

De la classe SparkContext: 

Obtenez un RDD sans partition ni élément

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

En scala, j'ai utilisé la commande "paralléliser".

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

En Java, créez une paire RDD vide comme suit:

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

@eliasah answer est très utile, je fournis du code pour créer une paire vide RDD. Prenons un scénario dans lequel il est nécessaire de créer une paire vide RDD (clé, valeur). Le code scala suivant montre comment créer une paire vide RDD avec key as String et value as Int.

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

RDD serait créé comme suit:

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

En Java, créer le RDD vide était un peu complexe. J'ai essayé d'utiliser scala.reflect.classTag mais cela ne fonctionne pas non plus. Après de nombreux tests, le code qui fonctionnait était encore plus simple.

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