Функции MapReduce - PullRequest
       7

Функции MapReduce

0 голосов
/ 25 июня 2019

Я работаю над проектом spark в IDE затмения, используя scala

Мне нужна помощь с этой проблемой MapReduce

Функция карты:

  1. удалить столбцы "спорт" и "биржа"
  2. удалить любую строку с NULL
  3. Добавить новый цикл продолжительности столбца. Это должно принимать значение в зависимости от цикла студента: лицензия (3 года), магистр (3 года), Ingeniorat (5 лет) и докторантура (3 года)

Разбавление:

  1. суммируйте всех студентов в зависимости от года, цикла и специальности.

мой ввод

matricule, dateins, цикл, specialite, биржа, спорт

0000000001,1999-11-22, Master, IC, Non, Non

0000000002,2014-02-01, Null, IC, Null, Oui

0000000003,2006-09-07, Null, Null, Oui, Oui

0000000004,2008-12-11, Master, IC, Oui, Oui

0000000005,2006-06-07, Master, SI, Non, Oui

0000000006,1996-11-16, Ingeniorat, SI, Null, Null

и т. Д.

Это код, с которого я начинаю. Я удалил колонку 'спорт' 'биржу' и извлек год

val sc = new SparkContext(conf)
   val x = sc.textFile("/home/amel/one")
  val re = x.map(_.split(",")).foreach(r => println(r(1).dropRight(6), r(2),r(3)))

это результат, который я получил

(2000, лицензия, Isil)

(2001, Master, SSI)

Результат, который я хочу получить:

Продолжительность годичного цикла по специальности Nbr-студентов

(2000, лицензия, 3 года, Isil, 400)

(2001, магистр, 3 года, SSI, 120)

// Я хочу, чтобы в столбце «Nbr-студентов» было указано количество студентов каждого года в зависимости от их цикла и специальности.

1 Ответ

0 голосов
/ 25 июня 2019

Полагаю, вам нужен только год - если вам не нужен год, измените cols(1).split("-")(0) на cols(1).

Сначала я подделал некоторые данные, используя данные выборки:

val x = sc.parallelize(Array(
  "001,2000-12-22,License,Isil,no,yes",
  "002,2001-11-30,Master,SSI,no,no",
  "003,2001-11-30,Master,SSI,no,no",
  "004,2001-11-30,Master,SSI,no,no",
  "005,2000-12-22,License,Isil,no,yes"
))

Далее я сделал несколько преобразований СДР.Сначала я удаляю и создаю необходимые столбцы, а затем добавляю счетчик 1 к каждой строке.Наконец, я уменьшаюByKey для подсчета всех строк с одинаковой информацией:

val re = x.map(row => {
  val cols = row.split(",")
  val cycle = cols(2)
  val years = cycle match {
    case "License" => "3 years"
    case "Master" => "3 years"
    case "Ingeniorat" => "5 years"
    case "Doctorate" => "3 years"
    case _ => "other"
  }
  (cols(1).split("-")(0) + "," + years + "," + cycle + "," + cols(3), 1)
}).reduceByKey(_ + _)
re.collect.foreach(println)
(2000,3 years,License,Isil,2)
(2001,3 years,Master,SSI,3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...