Как исправить: java.io.NotSerializableException: org.apache.spark.api.java.JavaSparkContext для wordCountProgram

Для вашего массива длина массива равна 3 (например, name.length = 3). Но поскольку он хранит элемент, начинающийся с индекса 0, он имеет максимальный индекс 2.

Итак, вместо 'i ** & lt; = name.length' вы должны написать 'i & lt; ** name.length' чтобы избежать «ArrayIndexOutOfBoundsException».

0
задан Codreanu George 25 June 2019 в 19:42
поделиться

2 ответа

Каждый узел Spark должен загружать классы, необходимые для выполнения вашей логики. В вашем случае это класс с методом countFileWords

Чтобы решить вашу проблему, вы должны сделать следующие шаги:

  1. Реализовать функцию countFileWords в отдельный модуль (вам нужен jar-файл с классом, в котором реализован countFileWords)
  2. Добавьте зависимость этого модуля в ваш веб-проект, в котором реализовано WordCountService
  3. Установите путь к файлу Jar в JavaSparkContext с использованием public void addJar(String path)

public void addJar (String path) Добавляет зависимость JAR для всех задач, которые будут выполняться в этом SparkContext в будущем. Переданный путь может быть либо локальным файлом, файлом в HDFS (или другими файловыми системами, поддерживаемыми Hadoop), либо URI HTTP, HTTPS или FTP.

0
ответ дан Peter Gyschuk 25 June 2019 в 19:42
поделиться

Проблема в new Function<String, Boolean>(), это анонимный класс, имеющий ссылку на WordCountService и переходный на JavaSparkContext. Чтобы избежать этого, вы можете сделать его статическим вложенным классом.

static class WordCounter implements Function<String, Boolean>, Serializable {
       private final String word;
       public WordCounter(String word){
           this.word = word;
       }

       @Override
       public Boolean call(String s) throws Exception {
                return s.contains(word);
       }
 }

и используйте его с

  JavaRDD<String> words = textFile.filter(new WordCounter(word));
1
ответ дан k5_ 25 June 2019 в 19:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: