2016-11-10 68 views
0
val filePath = "src/main/resources/millionsong.txt" 
val rdd = sc.textFile(filePath) 
val recordsRdd = rdd.map(line => line.split(",")) 
recordsRdd.foreach(println) 

我剛剛開始與斯卡拉。我不明白爲什麼輸出是? ... [Ljava.lang.String; @ 116c19d8 ...斯卡拉線分裂問題

一個放射性散佈線是: 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

這是一個數組的典型'toString'。您可能需要向裏面尋找內容。 – maasg

+0

它看到你問過一個python問題,爲什麼不使用PySpark? –

回答

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)) 
-4

使用flatMap替代地圖上的rdd。

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將不起作用。