Проблема с использованием функции collect() DataSet в apache flink

Я пытаюсь рассчитать индекс отношений AdamicAdar в следующем графике социальных сетей. Я настроил свои ребра, вершины, набор данных и график, используя библиотеку apache flink-gelly. Вот мой код:



    import org.apache.flink.api.java.ExecutionEnvironment;
    import org.apache.flink.api.java.operators.DataSource;
    import org.apache.flink.api.java.tuple.Tuple2;
    import org.apache.flink.graph.Graph;
    import org.apache.flink.graph.library.similarity.AdamicAdar;
    import org.apache.flink.types.NullValue;
    import org.apache.flink.types.StringValue;
    
    import java.util.List;
    
    public class MyMain {
    
        public static void main(String[] args) {
    
            ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
            DataSource> edgeDataSet = env.
                    readCsvFile(String.valueOf(MyMain.class.getResource("dataset/edges.csv"))).
                    types(StringValue.class, StringValue.class);
            Graph graph = Graph.fromTuple2DataSet(edgeDataSet, env);
    
            List list = null;
            try {
                list = graph.run(new AdamicAdar()).collect();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            System.out.println(list.get(0));
        }
    }

и вот ошибка, которую я получаю:



    Exception in thread "main" java.lang.NoSuchMethodError: org.apache.flink.configuration.ConfigUtils.decodeListFromConfig(Lorg/apache/flink/configuration/ReadableConfig;Lorg/apache/flink/configuration/ConfigOption;Lorg/apache/flink/util/function/FunctionWithException;)Ljava/util/List;
        at org.apache.flink.client.cli.ExecutionConfigAccessor.getJars(ExecutionConfigAccessor.java:75)
        at org.apache.flink.client.deployment.executors.PipelineExecutorUtils.getJobGraph(PipelineExecutorUtils.java:61)
        at org.apache.flink.client.deployment.executors.LocalExecutor.getJobGraph(LocalExecutor.java:98)
        at org.apache.flink.client.deployment.executors.LocalExecutor.execute(LocalExecutor.java:79)
        at org.apache.flink.api.java.ExecutionEnvironment.executeAsync(ExecutionEnvironment.java:962)
        at org.apache.flink.api.java.ExecutionEnvironment.execute(ExecutionEnvironment.java:878)
        at org.apache.flink.api.java.ExecutionEnvironment.execute(ExecutionEnvironment.java:862)
        at org.apache.flink.api.java.DataSet.collect(DataSet.java:413)
        at MyMain.main(MyMain.java:23)
    
    Process finished with exit code 1

Также это часть файла edge.csv, который я использую:



    5 122
    5 156
    5 158
    5 169
    5 180
    5 187
    5 204
    5 213
    5 235
    5 315
    5 316
    6 89
    6 95
    6 147
    6 219
    6 319
    7 22

где 5 316 означает, что вершина номер пять соединена с вершиной номер 216, и это определяет ребро.

А вот мой файл pom.xml pom.xml


person amin rahman    schedule 10.09.2020    source источник
comment
Не могли бы вы предоставить файл pom.xml/gradle.build? Это определенно проблема конфликта библиотек. Кроме того, не могли бы вы указать, как вы запускаете приложение? Спасибо   -  person Mikalai Lushchytski    schedule 10.09.2020
comment
Да, ты прав. Но я не знаю, какую версию я импортировал неправильно. Я отредактировал вопрос и добавил свой файл pom.xml. Я просто нажимаю кнопку запуска Intellij ide, чтобы запустить приложение. @МикалайЛущицкий   -  person amin rahman    schedule 11.09.2020
comment
Прежде всего, я бы посоветовал попытаться получить одну и ту же версию scala во всех библиотеках, поэтому, пожалуйста, замените flink-clients_2.12 на flink-clients_2.11.   -  person Mikalai Lushchytski    schedule 11.09.2020
comment
Кроме того, не уверен, почему требуется flink-shaded, но кажется, что flink-shaded-asm-7 должна быть версии 7.1-11.0   -  person Mikalai Lushchytski    schedule 11.09.2020
comment
Я меняю версии и все равно получаю ту же ошибку. @МикалайЛущицкий   -  person amin rahman    schedule 11.09.2020
comment
Не могли бы вы предоставить вывод mvn dependency:tree -Dverbose -Dincludes=flink-core ?   -  person Mikalai Lushchytski    schedule 11.09.2020
comment
Я получаю это: «mvn» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. @МикалайЛущицкий   -  person amin rahman    schedule 11.09.2020


Ответы (1)


NoSuchMethodError обычно означает несоответствие версии в ваших зависимостях. Глядя на свой pom.xml, вы видите, что это смесь разных версий ваших библиотек, связанных с Flink.

Кстати, я также заметил, что ваш .csv не разделен запятыми. Вы можете упростить программу и убедиться, что edgeDataset на самом деле является 2-кортежом, а не одиночным значением.

person Bryan Kyle    schedule 11.09.2020
comment
Где взять все зависимости с совместимыми версиями? Я получил их из разных источников (от самого apache flink до репозиториев maven!) @Bryan-Kyle - person amin rahman; 11.09.2020