2017-10-17 12 views
0

Ma question est similaire à une question déjà posée qui se trouve dans scala et pour la lecture de fichiers.Ecriture de fichiers dans HDFS à partir de fonctions de transformation d'étincelles dans Java

Reading files dynamically from HDFS from within spark transformation functions

Je suis au courant des accumulateurs qui les utilisent pour retourner des résultats au conducteur et à l'écriture HDFS dans le pilote. Dans notre cas d'utilisation, la sortie de chaque exécuteur est grande, donc je cherche un moyen d'écrire dans HDFS dans les transformations en Java.

Merci!

Répondre

0

Enfin trouvé un moyen gracieux pour y parvenir. Créez une variable de diffusion pour la configuration Hadoop

Configuration configuration = JavaSparkContext.toSparkContext(context).hadoopConfiguration(); 
Broadcast<SerializableWritable<Configuration>> bc = context.broadcast(new SerializableWritable<Configuration>(configuration)); 

passe cette variable de diffusion à votre transformation ou de l'action et obtenir système de fichiers Hadoop en utilisant extrait de code suivant:

FileSystem fileSystem = FileSystem.get(bc.getValue().value()); 

En espérant que cela aide si quelqu'un d'autre dans le même bateau.

À la votre!

1
JavaPairInputDStream<String, byte[]> input = KafkaUtils.createJDQDirectStream(ssc, String.class, byte[].class, 
     StringDecoder.class, DefaultDecoder.class, kafkaParams, Collections.singleton(topicName)); 

JavaPairDStream<String, byte[]> output = input.transformToPair(new Function<JavaPairRDD<String, byte[]>, JavaPairRDD<String, byte[]>>() { 
    public JavaPairRDD<String, byte[]> call(JavaPairRDD<String, byte[]> stringJavaPairRDD) throws Exception { 
     JavaSparkContext sc = JavaSparkContext.fromSparkContext(stringJavaPairRDD.context()); 
     stringJavaPairRDD.saveAsTextFile("hdfs://"); 
     return stringJavaPairRDD; 
    } 
}); 
+0

Merci Zhang pour votre réponse, je vous remercie de poster une méthode pour le faire. Mais dans mon cas, les données intermédiaires ne sont pas RDD et nous ne diffusons pas de données. –

+0

J'ai finalement choisi une idée de votre réponse et j'ai pu trouver une solution. Publié comme une autre réponse ... merci! –