ASP.NET отображение маршрута MVC

Если использование встроенного OneHotEncoder не является опцией, и у вас есть только одна переменная, реализующая одноразовую работу бедняка, более или менее проста. Сначала давайте создадим пример данных:

import org.apache.spark.mllib.linalg.{Vector, Vectors}

val rdd = sc.parallelize(List(
    Array("user1", "class1", "product1"),
    Array("user1", "class1", "product2"),
    Array("user1", "class1", "product5"),
    Array("user2", "class1", "product2"),
    Array("user2", "class1", "product5"),
    Array("user3", "class2", "product1")))

Далее нам нужно создать сопоставление от значения к индексу:

val prodMap = sc.broadcast(rdd.map(_(2)).distinct.zipWithIndex.collectAsMap)

и простую функцию кодирования:

def encodeProducts(products: Iterable[String]): Vector =  {
    Vectors.sparse(
        prodMap.value.size,
        products.map(product => (prodMap.value(product).toInt, 1.0)).toSeq
    )
}

Наконец, мы можем применить его к набору данных:

rdd.map(x => ((x(0), x(1)), x(2))).groupByKey.mapValues(encodeProducts)

Относительно легко прописать выше, чтобы обрабатывать несколько переменных.

Изменить:

Если количество продуктов велико, чтобы сделать трансляцию полезной, следует использовать вместо нее join. Сначала мы можем создать аналогичное сопоставление от продукта к индексу, но сохраним его как RDD:

import org.apache.spark.HashPartitioner

val nPartitions = ???

val prodMapRDD = rdd
     .map(_(2))
     .distinct
     .zipWithIndex
     .partitionBy(new HashPartitioner(nPartitions))
     .cache

val nProducts = prodMapRDD.count // Should be < Int.MaxValue

Затем мы переформатируем ввод RDD, чтобы получить PairRDD, индексированный по продукту:

val pairs = rdd
    .map(rec => (rec(2), (rec(0), rec(1))))
    .partitionBy(new HashPartitioner(nPartitions))

Наконец, мы можем join как

def indicesToVec(n: Int)(indices: Iterable[Long]): Vector = {
     Vectors.sparse(n, indices.map(x => (x.toInt, 1.0)).toSeq)
}

pairs.join(prodMapRDD)
   .values
   .groupByKey
   .mapValues(indicesToVec(nProducts.toInt))
13
задан Soham Dasgupta 19 March 2019 в 12:09
поделиться

4 ответа

я просто ответил на свой собственный вопрос. У меня были маршруты назад (Значение по умолчанию было выше страницы).

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

, Таким образом, это поднимает следующий вопрос..., как "Значение по умолчанию" направляет соответствие (я предполагаю, что они используют регулярные выражения здесь), маршрут "Страницы"?

маршрут По умолчанию соответствует на основе того, что мы называем Конвенцией по Конфигурации. Scott Guthrie объясняет это хорошо в его первом сообщении в блоге на ASP.NET MVC. Я рекомендую прочитать его и также его другие сообщения. Следует иметь в виду, что они были отправлены на основе первого CTP, и платформа изменилась. Можно также найти, что сеть набрала ASP.NET MVC на сайте asp.net Scott Hanselman.

6
ответ дан 2 December 2019 в 00:47
поделиться

Я просто ответил на свой собственный вопрос. У меня были маршруты назад (Значение по умолчанию было выше страницы). Ниже правильный порядок. Таким образом, это поднимает следующий вопрос..., как "Значение по умолчанию" направляет соответствие (я предполагаю, что они используют регулярные выражения здесь), маршрут "Страницы"?

routes.MapRoute(
            "Page",
            "{Name}.aspx",
            new { controller = "Page", action = "Display", id = "" }
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
6
ответ дан 2 December 2019 в 00:47
поделиться

На одной из Витрины Rob Conery MVC экранные демонстрации , он встречается с этой точной проблемой. Это приблизительно в 23-минутной метке, если Вам интересно.

1
ответ дан 2 December 2019 в 00:47
поделиться

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

Вот мой маршрут в Global.asax.cs

routes.MapRoute(
    "Page", 
    "{Page}.aspx", 
    new { controller = "Page", action = "Index", id = "" }
);

, Вот мой контроллер, который расположен в папке Controllers:

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class PageController : Controller
    {
        public void Index()
        {
            Response.Write("Page.aspx content.");
        }
    }
}
0
ответ дан 2 December 2019 в 00:47
поделиться
Другие вопросы по тегам:

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