val filePath = "src/main/resources/millionsong.txt"
val rdd = sc.textFile(filePath)
val recordsRdd = rdd.map(line => line.split(","))
recordsRdd.foreach(println)
我刚开始使用Scala。我不明白为什么输出? ... [Ljava.lang.String; @ 116c19d8 ...
Rdd的一行是: 2001.0,0.884123733793,0.610454259079,0.600498416968,0.474669212493,0.247232680947,0.357306088914,0.344136412234,0.339641227335,0.600858840135,0.425704689024,0.60491501652,0.419193351817
我在想输出应该是数组?
答案 0 :(得分:2)
打印值的正确代码是:
val filePath = "src/main/resources/millionsong.txt"
val rdd = sc.textFile(filePath)
val recordsRdd = rdd.flatMap(line => line.split(","))
recordsRdd.foreach(println)
问题在于你正在做的是你在RDD
上进行映射,然后将字符串拆分成Array[String]
而你没有更早地展平它,因此产生的RDD将是类型:RDD[Array[String]]
。因此,当您尝试使用recordsRdd.foreach(println)
进行打印时,它正在尝试打印Array对象,从而显示奇怪的值。
如果你想打印每个数组的值,那么这将是这样的:
val filePath = "src/main/resources/millionsong.txt"
val rdd = sc.textFile(filePath)
val recordsRdd = rdd.map(line => line.split(","))
recordsRdd.foreach(_.foreach(println))
答案 1 :(得分:1)
String.split
返回Array[String]
,因此您正在尝试打印数组。 Scala数组是普通的java数组,这就是为什么它有这样的不可读的toString
。根据您要实现的目标,您应该使用record.Rdd.foreach(_.foreach(println))
或val recordsRdd = rdd.flatMap(line => line.split(","))
。不确定某种类型的'Rdd'(Spark RDD?)是否与scala集合兼容。如果不是,则flatMap
将无效。
答案 2 :(得分:-4)
使用flatMap代替rdd。