मैं शब्दों को गिनने के लिए स्पार्क प्रोग्राम लिखता हूं लेकिन अब मैं शब्द के बजाय अक्षरों को गिनना चाहता हूं। क्या कोई मुझे बता सकता है कि मुझे निम्नलिखित कोड में क्या बदलना है:

यहाँ शब्दों को गिनने के लिए कोड है

public class WordCount {


static class SplitFunction implements FlatMapFunction<String, String>
 {
 public Iterable<String> call(String s) {
    return Arrays.asList(s.split(" "));
  }
 }

public static void main(String[] args)
{

SparkConf sparkConf = new SparkConf();
sparkConf.setAppName("Spark WordCount example using Java");

sparkConf.setMaster("local");
JavaSparkContext sparkContext = new JavaSparkContext(sparkConf);

JavaRDD<String> textFile = sparkContext.textFile("input.txt");

JavaRDD<String> words = textFile.flatMap(new SplitFunction());

JavaPairRDD<String, Integer> pairs = words.mapToPair(new PairFunction<String, String, Integer>() {
      public Tuple2<String, Integer> call(String s) {
        return new Tuple2<String, Integer>(s, 1);
      }
     });
 JavaPairRDD<String, Integer> counts = pairs.reduceByKey(
    new Function2<Integer, Integer, Integer>() {
      public Integer call(Integer a, Integer b) {
        return a + b;
      }
    });


counts.saveAsTextFile("output");
sparkContext.stop();
sparkContext.close();
   }
 }
0
ND Gaming 12 मई 2021, 20:42

1 उत्तर

सबसे बढ़िया उत्तर

मैं जावा का कभी भी उपयोग नहीं करता क्योंकि यह दर्द है। स्कैला का प्रयोग करें मेरी सलाह है।

यदि आप डॉक्स से इस शब्द गणना उदाहरण को देखते हैं:

JavaRDD<String> textFile = sc.textFile("hdfs://...");
JavaPairRDD<String, Integer> counts = textFile
    .flatMap(s -> Arrays.asList(s.split(" ")).iterator())
    .mapToPair(word -> new Tuple2<>(word, 1))
    .reduceByKey((a, b) -> a + b);
counts.saveAsTextFile("hdfs://...");

फिर अगर आप इस तरह विभाजित होते हैं: s.split("")), तो आपको सभी वर्ण विभाजक सहित मिलेंगे।

फिर आप बाद में विभाजकों की संख्या को फ़िल्टर कर सकते हैं। आप निश्चित रूप से कोड में नाम बदलना चाह सकते हैं।

0
thebluephantom 12 मई 2021, 21:47