Flex [закрытые] платформы MVC

Вот родной подход Spark, который не затрудняет имена столбцов. Он основан на aggregateByKey и использует словарь для сбора столбцов, которые отображаются для каждого ключа. Затем мы собираем все имена столбцов, чтобы создать окончательный файл данных. [Предварительная версия использовала jsonRDD после испускания словаря для каждой записи, но это более эффективно.] Ограничение на конкретный список столбцов или исключение таких, как XX, было бы легкой модификацией.

Производительность кажется хорошим даже на довольно больших столах. Я использую вариацию, которая подсчитывает количество раз, каждое из которых имеет переменное число событий для каждого идентификатора, генерируя один столбец для каждого типа события. Код в основном тот же, за исключением того, что для подсчета вхождений используется коллекция.Counter вместо dict в seqFn.

from pyspark.sql.types import *

rdd = sc.parallelize([('X01',41,'US',3),
                       ('X01',41,'UK',1),
                       ('X01',41,'CA',2),
                       ('X02',72,'US',4),
                       ('X02',72,'UK',6),
                       ('X02',72,'CA',7),
                       ('X02',72,'XX',8)])

schema = StructType([StructField('ID', StringType(), True),
                     StructField('Age', IntegerType(), True),
                     StructField('Country', StringType(), True),
                     StructField('Score', IntegerType(), True)])

df = sqlCtx.createDataFrame(rdd, schema)

def seqPivot(u, v):
    if not u:
        u = {}
    u[v.Country] = v.Score
    return u

def cmbPivot(u1, u2):
    u1.update(u2)
    return u1

pivot = (
    df
    .rdd
    .keyBy(lambda row: row.ID)
    .aggregateByKey(None, seqPivot, cmbPivot)
)
columns = (
    pivot
    .values()
    .map(lambda u: set(u.keys()))
    .reduce(lambda s,t: s.union(t))
)
result = sqlCtx.createDataFrame(
    pivot
    .map(lambda (k, u): [k] + [u.get(c) for c in columns]),
    schema=StructType(
        [StructField('ID', StringType())] + 
        [StructField(c, IntegerType()) for c in columns]
    )
)
result.show()

Производит:

ID  CA UK US XX  
X02 7  6  4  8   
X01 2  1  3  null
33
задан Community 10 September 2008 в 14:13
поделиться

9 ответов

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

Одной из самых хороших функций Помощника является декларативная конфигурация, по существу Вы обеспечиваете электричеством свое приложение в использовании тегов в том, что называют картой события - в основном список событий, которые Ваше приложение генерирует, и какие меры принять, когда они происходят. Карта события дает хороший обзор того, что делает Ваше приложение. Помощник использует Flex' собственный механизм события, он не изобретает свое собственное как большинство других платформ. Можно диспетчеризировать событие отовсюду в иерархии представления и иметь ее пузырь до платформы автоматически, вместо того, чтобы иметь необходимость иметь прямую линию, как Дымчатые топазы CairngormEventDispatcher или система уведомления PureMVC.

Помощник также использует форму внедрения зависимости (усиливающий привязку), который позволяет подключить Ваши модели к Вашим представлениям без любого, знающего о другом. Это - вероятно, наиболее мощная функция платформы.

, По моему мнению, ни одна из других сред разработки приложения Flex, прибывших в какой-либо степени Помощник. Однако это соперники и почему я полагаю, что они менее полезны:

PureMVC активно отрицает, что Вы многие преимущества Flex (например, привязка и распространение событий) для платформы являетесь портативными - doubious цель, по моему мнению. Это также сверхспроектировано и столь агрессивное, как они прибывают. Каждая часть Вашего приложения зависит от платформы. Однако PureMVC не ужасен, просто не очень подходящий вариант для Flex. Альтернатива FlexMVCS, усилие сделать PureMVC более подходящим для Flex (к сожалению, еще нет никакой документации, просто источник).

Дымчатый топаз является пакетом антишаблонов, которые приводят к приложениям, которые сильно связываются к глобальным переменным. Nuff заявил (но если Вам интересно, вот еще некоторые мои мысли , и здесь также ).

Swiz является платформой, вдохновленной платформой Spring для Java и Дымчатого топаза (пытающийся восполнить худшие части последнего). Это обеспечивает контейнер внедрения зависимости и использует метаданные, чтобы позволить автосоединить проводом зависимостей. Это - интересный, но небольшой bizzare в этом, переходит к таким длинам для предотвращения глобальных переменных Дымчатого топаза при помощи внедрения зависимости, но затем использует глобальную переменную для центральной диспетчеризации события.

Это - те, я попробовал или исследовал. Существуют немногие другие, что я услышал о, но ни один, что я думаю, широко не используется. Mate и Swiz были и представлены в недавнем 360|Flex конференция, и существуют доступные видео (, у людей Помощника есть инструкции относительно того, как наблюдать их )

48
ответ дан 27 November 2019 в 18:12
поделиться

Примите во внимание, что Дымчатый топаз является Adobe, спонсировал платформу и теперь разместил на opensource.adobe.com. Также обратите внимание, что это является безусловно самым плодовитым среди разработчиков в данный момент.

, Если Вы знаете Дымчатый топаз и ищете задание, Вы не пойдете далеко неправильно.

0
ответ дан 27 November 2019 в 18:12
поделиться

Мы в настоящее время работаем над реализация MVCS в платформа Spring ActionScript . Это использует полную мощность Инверсии контейнера Управления, таким образом, Вы централизовали управление зависимостью и можете подкачать вещи легко. Это не является очень предписывающим в том, как Вы делаете вещи, но предоставляет Вам очень гибкую инфраструктуру.

, Если Вы плохо знакомы с Spring ActionScript и MVCS, у меня есть вводное сообщение в моем блоге: http://www.herrodius.com/blog/158

1
ответ дан 27 November 2019 в 18:12
поделиться

Дымчатый топаз прост в использовании и хорошо зарегистрирован: http://www.cairngormdocs.org/

я рекомендую Проводник Схемы Дымчатого топаза и классическая статья приблизительно Дымчатый топаз .

я был плохо знаком с Flex, когда я изучил Дымчатый топаз, но нашел это полезным и легким учиться с вышеупомянутым.

0
ответ дан 27 November 2019 в 18:12
поделиться

Я видел такие обсуждения много раз. Обычно они начинаются с того, какую платформу Flex вы используете. Не многие люди задаются вопросом, ПОЧЕМУ вам вообще нужно использовать какой-либо фреймворк поверх фреймворка Flex.

Я не поддерживаю использование какой-либо инфраструктуры MVC (Cairngorm, PureMVC) в коде Flex. Мате - лучший кандидат. По крайней мере, это просто для понимания и ненавязчиво. Я предпочитаю использовать улучшенные компоненты
по выбору. Мы создали и открыли исходный код для нескольких из них (см. Clear.swc в Clear Toolkit по адресу http://sourceforge.net/projects/cleartoolkit/ .

Первая глава нашей предстоящей O В книге Рейли «Разработка предприятия с помощью Flex» приводится подробное сравнение нескольких фреймворков Flex: http://my.safaribooksonline.com/9780596801465 .

5
ответ дан 27 November 2019 в 18:12
поделиться

MATE - это правильный выбор. Фреймворк, который выполняет то, что должен делать фреймворк. Несвязанная архитектура просто Маленький след Эффективность

0
ответ дан 27 November 2019 в 18:12
поделиться

У меня есть сомнения по поводу этих MVC-фреймворков (Mate, Cairgnorm и т. Д.) В том, как они реализуют карты событий и контроллеры событий, это слишком напоминает мне wxWidgets и другие графические интерфейсы.

Однако было бы действительно хорошо, если бы Flex или одна из этих сред MVC использовала парадигму сигналов / слотов, предлагаемую Qt.

0
ответ дан 27 November 2019 в 18:12
поделиться

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

0
ответ дан 27 November 2019 в 18:12
поделиться

Посмотрите Robotlegs

"Он обеспечивает клей, который необходим вашему приложению, чтобы легко функционировать разрозненно. Благодаря использованию автоматизированной инъекции зависимостей на основе метаданных Robotlegs удаляет "кодовый" код в приложении. Способствуя свободному соединению и избегая использования синглтонов и статики во фреймворке, Robotlegs может помочь вам написать код, который хорошо поддается тестированию."

7
ответ дан 27 November 2019 в 18:12
поделиться
Другие вопросы по тегам:

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