используйте println в scala - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь использовать println для печати вывода в определенном формате, но не могу получить.

val vgdataLines = sc.textFile("hdfs:///user/ashhall1616/bdc_data/assignment/t1/vgsales-small.csv")
val vgdata = vgdataLines.map(_.split(";"))

val countPublisher  = vgdata.map(r =>  (r(4),1))
val totalcount= countPublisher.count().toInt
val reducePublisher = countPublisher.reduceByKey(_+_)
def toPercentage(x: Int): Double = {x * 100/totalcount}
val top50 = countPublisher.map(r =>  (r._1, r._2, toPercentage(r._2)))
val top50desc= top50.sortBy(_._2, false)
println(top50desc.take(50))

Ожидаемый формат вывода:

(Ubisoft, 3,15.0)

(Activision, 3,15.0)

(Electroni c Arts, 2,10.0)

(Nintendo, 2,10.0)

(Признание Развлечения, 1,5,0)

(Sega, 1,5,0)

(3DO, ​​1,5,0)

(Namco Bandai Games, 1,5,0)

Формат, который я получаю: res1: Array [(String, Int, Double)] = Array ((Sony Computer Entertainment, 1,5.0), (Activision, 1,5.0), (Nintendo, 1,5.0), ( Activision, 1,5,0), (Nintendo, 1,5,0), (3DO, ​​1, 5,0), (Sega, 1,5,0), (TDK Mediactive, 1,5,0), (Capcom, 1,5,0), (Atari , 1,5,0), (Konami Digital Entertainment, 1,5,0), (Namco Bandai Games, 1,5,0), (Electroni c Arts, 1,5,0), (Kalypso Media, 1,5,0), (Ubisoft, 1,5.0), (Ubisoft, 1,5.0), (Electroni c Arts, 1,5.0), (Ubisoft, 1,5.0), (Acclaim Entertainment, 1,5.0), (Activision, 1,5.0))

Это когда я использую top50des c .take (50) вместо println (чтобы p50des c. взять (50))

1 Ответ

4 голосов
/ 26 мая 2020

Учитывая

val l = List[(String, Int, Double)](
  ("Ubisoft", 3, 15.0),
  ("Activision", 3, 15.0),
  ("Electronic Arts", 2, 10.0)
)

обратите внимание на разницу между печатью каждого элемента коллекции

l.foreach(println)
// (Ubisoft,3,15.0)
// (Activision,3,15.0)
// (Electronic Arts,2,10.0)

и печатью самой коллекции

println(l)
// List((Ubisoft,3,15.0), (Activision,3,15.0), (Electronic Arts,2,10.0))

foreach это намерение, когда мы будем sh применить некоторый побочный эффект , например печать, к каждому элементу.

...