Присваивание переменной Loop переменной Runnable

, лежащий в основе JSON String, является

"{ \"column_name1\":\"value1\",\"column_name2\":\"value2\",\"column_name3\":\"value3\",\"column_name5\":\"value5\"}";

Ниже приведен скрипт для фильтрации JSON и загрузки необходимых данных в Cassandra.

  sqlContext.read.json(rdd).select("column_name1 or fields name in Json", "column_name2","column_name2")
            .write.format("org.apache.spark.sql.cassandra")
            .options(Map("table" -> "Table_name", "keyspace" -> "Key_Space_name"))
            .mode(SaveMode.Append)
            .save()
1
задан Jamie Snipes 15 January 2019 в 19:38
поделиться

3 ответа

Трудно сказать без дополнительной информации о TaskCard и других объектах, но вы должны попытаться объявить некоторую переменную final и попытаться напечатать хеш-код для объекта, чтобы проверить, действительно ли он такой же instance или другие экземпляры, семантически равные:

for (Iterator<TaskCard> i = taskManager.getTaskCards().iterator(); i.hasNext();) {
    TaskCard taskCard = i.next();
    taskCard.updateTask();
    ReturnInterface<String> returnInterface = new TaskReturnIterface(taskManager, taskCard);
    Task task = taskCard.getTask();
    // Mark this as "final" so you can use it as is in any internal anonymous class:
    final ProtocolInterface selectedProtocol = task.getDevice().getSelectedProtocol();
    selectedProtocol.setTask(task);
    selectedProtocol.setReturnInterface(returnInterface);
    System.out.println("[1] selectedProtocol device=" + selectedProtocol.getDevice().hashCode());
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {  
            System.out.println("[2] selectedProtocol device=" + selectedProtocol.getDevice().hashCode());
        }
    });
}

Казалось бы, есть некоторые связи между объектами, которые могут либо печатать один и тот же вывод, либо использовать один и тот же объект в бэкэнде. Особенно эта часть:

ProtocolInterface selectedProtocol = task.getDevice().getSelectedProtocol();
selectedProtocol.setTask(task);
selectedProtocol.setReturnInterface(returnInterface);

выглядит странно, поскольку selectedProtocol кажется каким-то образом привязанным к самому устройству, привязанному к задаче, тогда вам придется снова ставить его задачу?

Это в основном делать task.getDevice().getSelectedProtocol().setTask(task), который выглядит так, как будто есть какая-то лазейка, которую вы должны проверить ...

Кроме того, SwingUtilities.invokeLater() является своего рода зарезервированным для обработки графического интерфейса, так что вы можете захотеть удалить его (если он не выполняет GUI ...).

0
ответ дан Matthieu 15 January 2019 в 19:38
поделиться

Да, ты прав! Вы создаете Runnable экземпляр со ссылкой на объект протокола. Эта ссылка может быть изменена до тех пор, пока invokeLater не выполнит эту задачу. Поэтому вам нужно скопировать необходимые данные вместо сохранения ссылки.

SwingUtilities.invokeLater(new Runnable() {
        final Device device = selectedProtocol.getDevice();
        @Override
        public void run() {  
            System.out.println("[Taskmanager.TaskReturnInterface.actionPerformed.RUN()]selectedProtocol device= " + device);
        }
    });
0
ответ дан oleg.cherednik 15 January 2019 в 19:38
поделиться

Попробуйте это:

Iterator<TaskCard> i = taskManager.getTaskCards().iterator();

while (i.hasNext()) {
    TaskCard taskCard = i.next();
    taskCard.updateTask();
    ReturnInterface<String> returnInterface = new TaskReturnIterface(taskManager, taskCard);
    Task task = taskCard.getTask();
    final ProtocolInterface selectedProtocol = task.getDevice().getSelectedProtocol();
    selectedProtocol.setTask(task);
    selectedProtocol.setReturnInterface(returnInterface);

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {  
            System.out.println("[Taskmanager.TaskReturnInterface.actionPerformed.RUN()]selectedProtocol device= " + selectedProtocol.getDevice());
        }
    });
}
0
ответ дан NiVeR 15 January 2019 в 19:38
поделиться
Другие вопросы по тегам:

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