Сравните два XML-файла, таких как TFS в c # [duplicate]

Связь с использованием шлюза Py4J по умолчанию просто невозможна. Чтобы понять, почему мы должны взглянуть на следующую диаграмму из документа PySpark Internals [1]:

Поскольку шлюз Py4J работает на драйвере он не доступен интерпретаторам Python, которые взаимодействуют с рабочими JVM через сокеты (см., например, PythonRDD / rdd.py ).

Теоретически было бы возможно создать отдельный Py4J-шлюз для каждого рабочего, но на практике это вряд ли будет полезно. Игнорирование таких проблем, как надежность Py4J, просто не предназначено для выполнения задач, требующих большой объем данных.

Есть ли какие-либо обходные пути?

  1. Использование API источников данных Spark SQL для обертки JVM-кода. Плюсы: поддерживаемый, высокий уровень, не требует доступа к внутреннему API PySpark. Отношения: относительно подробные и не очень хорошо документированные, ограниченные в основном входными данными
  2. Работа с DataFrames с использованием Scala UDF. Плюсы: легко реализовать (см. Искра: как сопоставить Python с определенными функциями Scala или Java? ), без преобразования данных между Python и Scala, если данные уже хранятся в DataFrame, минимальный доступ к Py4J Минусы: Требуется доступ к шлюзу Py4J и внутренним методам, ограниченным Spark SQL, трудно отлаживать, не поддерживается
  3. Создание интерфейса Scala на высоком уровне аналогичным образом, как это делается в MLlib. Плюсы: гибкая, возможность выполнения произвольного сложного кода. Это можно сделать либо прямо на RDD (см., Например, MLlib model wrappers ), либо с помощью DataFrames (см. Как использовать класс Scala внутри Pyspark ). Последнее решение выглядит гораздо более дружелюбным, поскольку все данные уже обрабатываются существующим API. Минусы: Низкий уровень, требуемое преобразование данных, то же, что и UDF, требует доступа к Py4J и внутреннему API, не поддерживается Некоторые основные примеры можно найти в Преобразование PySpark RDD с помощью Scala
  4. Использование внешних инструмент управления рабочим процессом для переключения между заданиями Python и Scala / Java и передачи данных в DFS. Плюсы: Простота в реализации, минимальные изменения самого кода Минусы: стоимость чтения / записи данных ( Alluxio ?)
  5. Использование общих SQLContext (см., Например, Apache Zeppelin или Livy ) для передачи данных между гостевыми языками с использованием зарегистрированных временных таблиц. Плюсы: хорошо подходит для интерактивного анализа Минусы: не столько для пакетных заданий (Цеппелин), либо может потребоваться дополнительная оркестровка (Livy)

  1. Джошуа Розен. (2014, август 04) Внутренние элементы PySpark . Получено из https://cwiki.apache.org/confluence/display/SPARK/PySpark+Internals

90
задан Russell 9 December 2009 в 03:00
поделиться

10 ответов

KDiff3 не является специфичным для XML, но он является бесплатным. Это хорошая работа по сравнению и слиянию текстовых файлов.

9
ответ дан hlovdal 27 August 2018 в 16:07
поделиться
  • 1
    Я согласен, что сейчас использую KDiff3, однако инструмент, специально предназначенный для XML, который может перейти на уровень элемента, будет потрясающим. – Russell 9 December 2009 в 02:32
  • 2
    С этой точки зрения я думал: способ, которым KDiff выполняет иерархическую разницу каталогов, может также работать иерархический разброс элементов. Поэтому, если элемент изменился, то я согласен, что родительские элементы также должны быть помечены как измененные. – Russell 9 December 2009 в 02:38
  • 3
    все понимают, что в xml дочерние узлы не гарантируются в каком-либо конкретном порядке, поэтому любой «инструмент» что что-то не было в одном порядке от одного файла к другому, действительно не будет настоящим инструментом, совместимым с xml – feeling unwelcome 9 December 2009 в 03:47
  • 4
    Если порядок меняется, то элементы разные. В зависимости от семантики рассматриваемого документа XML заказ может или не может быть значительным. Например. в XHTML очевидно порядок имеет значение. – George Lund 30 October 2013 в 16:56
  • 5
    Дело в том, что регулярный инструмент сравнения работает на основе строк. Существуют специальные инструменты для сравнения, например. CSV-файлы, которые понимают формат, который он отличается. Чем лучше это понимание, тем эффективнее это может произойти. Хороший инструмент XML diff сможет анализировать XML, использовать схему для определения ограничений, таких как, например, порядок заказов, а затем использовать эти знания, чтобы дать гораздо более эффективный опыт слияния / слияния. – Stijn de Witt 11 July 2017 в 08:35

A7Soft предоставляет инструменты сравнения и сравнения XML:

http://www.a7soft.com

1
ответ дан Andrew Lapick 27 August 2018 в 16:07
поделиться

Это движок для разработчиков java, но в нем есть демонстрационный интерфейс - вы можете его использовать: https://community.emc.com/docs/DOC-5042

0
ответ дан AP. 27 August 2018 в 16:07
поделиться

Инструмент Pretty Diff был создан с учетом XML. Просто убедитесь, что вы нажмете опцию «разметка».

http://prettydiff.com/

3
ответ дан austincheney 27 August 2018 в 16:07
поделиться
  • 1
    Но это онлайн-инструмент, верно? Как я могу применить изменения слева направо или слить? – dma_k 23 August 2011 в 11:22

Я использую TortoiseMerge, который включен в программу TortoiseSVN

. Мы говорили о инструментах File Diff в этом потоке, не посвященных XML, хотя

https://stackoverflow.com/questions/1830962/file-differencing-software-on-windows

3
ответ дан Community 27 August 2018 в 16:07
поделиться
  • 1
    Спасибо S.Mark, как я уже упоминал в epotter, я уже использую KDiff3 для общих diff файлов, но я бы предпочел использовать специфичную для XML утилиту diff, если она доступна (если нет, я начну с открытым исходным кодом :)) – Russell 9 December 2009 в 02:44
  • 2
    & GT; & GT; (if not, I will start up an open-source one :) Ничего себе, замечательно! с нетерпением ждем его, пожалуйста, снимите ссылку где-то здесь, если она начнется. – YOU 9 December 2009 в 02:51
  • 3
    Нормально будет делать :)- – Russell 9 December 2009 в 02:53

Есть несколько инструментов XML и методов слияния на основе Java, перечисленных здесь:

Open Source XML Diff, написанный на Java

Добавленные ссылки:

30
ответ дан dma_k 27 August 2018 в 16:07
поделиться
  • 1
    У меня возникли проблемы с поиском каких-либо ссылок на программное обеспечение в указанной вами ссылке. – Russell 9 December 2009 в 02:42
  • 2
    Да, я тоже! Может понадобиться Google немного ... – Chris Fulstow 9 December 2009 в 02:58
  • 3
    +1 Winmerge версия 2.12.4.0; Меню & quot; Плагин & quot; - & GT; & Quot; Список & Quot; - & GT; check & quot; Включить плагины & quot ;; Меню & quot; Плагин & quot; - & GT; «Автоматическая распаковка». Протестировано с XML-файлом с именем файла с расширением .xml и, похоже, работает. – Alessandro Jacopson 14 September 2011 в 10:43
  • 4
    Это не имеет отношения к атрибутам, находящимся в разных порядках, поэтому его полезность может быть ограничена в зависимости от вашей ситуации. – Michael Kohne 8 March 2012 в 22:50
  • 5
    Сначала используйте это преобразование в любых файлах XML для сортировки элементов и атрибутов: stackoverflow.com/questions/4091085/xslt-to-sort-nodes-by-name – LarryDavid 8 April 2014 в 12:34
  • 6
    Похоже, что плагин больше не доступен. – Fernando Gonzalez Sanchez 23 May 2017 в 20:53

Я рекомендую вам использовать инструмент CodeCompare . Он поддерживает собственное выделение XML-данных, и это может быть хорошим решением для вашей задачи.

0
ответ дан JackD 27 August 2018 в 16:07
поделиться

Хотя это не инструмент GUI, мои быстрые тесты показали, что diffxml имеет некоторые перспективы. Автор, похоже, подумал о сложностях представления различий для вложенных элементов стандартизованным способом (его спецификация языка DUL - Delta Update Language).

Установив и запустив свои инструменты, могу сказать, что вывод исходного текста довольно ясен и краток. Он не предлагает такую ​​же степень непосредственного восприятия, как инструмент графического интерфейса, но при условии, что выход стандартизирован как DUL, возможно, вы сможете это сделать и создать инструмент для создания визуального представления. Мне бы очень хотелось его увидеть.

В разделе «Ссылки» автора есть ссылка на несколько других инструментов разнесения XML, но, как вы упомянули в своем сообщении, они все являются собственностью.

4
ответ дан Jarret Hardie 27 August 2018 в 16:07
поделиться
  • 1
    Мой опыт в том, что: он не может обрабатывать переупорядочение элементов вообще, что можно ожидать в инструменте XML (в качестве опции, потому что иногда порядок важен), а вместо минимальных различий он отображает все измененные элементы , В принципе, файл diff - это всего лишь целый новый XML-файл, если есть большие изменения форматирования без больших семантических изменений. – SilverbackNet 24 January 2013 в 04:07

DiffDog от Altova имеет бесплатную 30-дневную пробную версию и должен делать то, что вы ищете:

http://www.altova.com/diffdog/diff-merge-tool.html

0
ответ дан Lin Yu Tang 27 August 2018 в 16:07
поделиться
  • 1
    Вы правильно прочитали вопрос? он говорит бесплатно! – Piotr Owsiak 31 May 2011 в 17:48

Я понимаю, что эта ветка немного старая, и я уверен, что вы нашли решение к настоящему времени, но для будущих читателей я написал и выпустил приложение Windows, которое специально решает проблему сравнения и слияния XML-файлов.

Project: Merge может выполнять два и три способа сравнения и слияния любого файла XML (где два файла считаются независимыми версиями общего базового файла). Вы можете дать ему указание идентифицировать элементы во входных файлах по значениям атрибутов или по содержанию дочерних элементов.

Он полностью управляется через командную строку и может также генерировать текстовые отчеты, содержащие различия между файлами.

Project: Merge merging three XML files [/g1]

18
ответ дан user 27 August 2018 в 16:07
поделиться
  • 1
    Привет @James Спасибо за информацию. Очевидно, было бы неплохо, если бы это было бесплатно, но это действительно обеспечило некоторые очень классные функции - и ваш пример выше - классика относительно того, почему этот инструмент полезен! Спасибо за сообщение. :) – Russell 27 February 2011 в 23:59
  • 2
    Я пробовал Project :: Merge и, к сожалению, не смог справиться с моей задачей. У меня есть HTML-текст в парах (<p>), который добавляется форматированием (например, <i>, <em>). Итак, Project :: Merge показывает, что полный пара был изменен, он не делает углубленного анализа слов. – dma_k 23 August 2011 в 10:28
  • 3
    Да, я сожалею, что XHTML (он никогда не будет использовать устаревший HTML). В этом отношении поддержка довольно ограничена, как и различие текста в блоках XML в целом. Большинство работ до сих пор были сосредоточены на XML-файлах с конфигурационным стилем, где данные о символах произвольной формы ограничены по размеру и использованию. Надеюсь, я улучшу проект: слияние в этой области в будущей версии. – user 25 August 2011 в 18:05
  • 4
    -1, ОП спросил о бесплатном программном обеспечении. Project Merge - это пробная версия, а также не обновляется через 3 года. – yourbuddypal 2 July 2014 в 15:20
  • 5
    Проект: Merge теперь заменен Oso XML Merge: osocorporation.com/xmlmerge/index.php – leetNightshade 4 August 2016 в 23:48
Другие вопросы по тегам:

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