Scala Функция карты - PullRequest
       76

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

0 голосов
/ 16 июня 2020

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

Значения выглядят следующим образом: RDD: org. apache .spark.rdd.RDD [String]

Array [String] = Array (200110 1220 THEFT, 200112 2020 BATTERY, 200101 1010 ПОВРЕЖДЕНИЕ, ....)

Я бы хотел получить RDD вроде (1220 THEFT, 2020 BATTERY, 1010 DAMAGE, ....)

I Пробовал следующее, но выкидывает ошибки.

val crimeData = sc.textFile("/user/user_dir/crime_data")
val crimeTest = crimeData.map(crime => { 
val b = crime.split(",")
val c = b(0).split(" ")
((c(1),c(2)))
})

Когда я запускаю этот код, все, что я получаю, - это ArrayOutOfBoundsExeception: 1

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

Помогите, пожалуйста!

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Я не думаю, что нужен следующий код. val b = Crime.split(",") В CrimeData каждый обрабатываемый фрагмент данных равен "200110 1220 THEFT", поэтому нам не нужно использовать запятую для разделения.

val crimeTest = crimeData.filter(_.split(" ").length == 3)
      .map(crime => {
      val c = crime.split(" ")
      (c(1), c(2))
    })

Надеюсь, это вам поможет.

0 голосов
/ 18 июня 2020

Я мог бы заставить код работать вот так

val crimeTest = crimeData.map(rec => {
val b = rec.split(" ")
val c = b(0).split("\t")
((c(1), c(2)))

})

Итак, мои окончательные результаты были такими:

(7866, THEFT)

(6525, БАТАРЕЯ)

(4714, НАРКОТИКИ)

....

...