2016-10-08 186 views
1

我有一個RDD[String]其中包含以下數據:Scala的RDD [字符串]到RDD [字符串,字符串]

數據格式:('Movie Name','Actress Name')

('Night of the Demons (2009) (uncredited)', '"Steff", Stefanie Oxmann Mcgaha') 
('The Bad Lieutenant: Port of Call - New Orleans (2009) (uncredited)', '"Steff", Stefanie Oxmann Mcgaha') 
('"Please Like Me" (2013) {All You Can Eat (#1.4)}', '$haniqua') 
('"Please Like Me" (2013) {French Toast (#1.2)}', '$haniqua') 
('"Please Like Me" (2013) {Horrible Sandwiches (#1.6)}', '$haniqua') 

欲將此轉換爲RDD[String,String]如第一元件' '將是我在RDD中的第一個字符串,' '中的第二個元素將成爲我在RDD中的第二個字符串。

我嘗試這樣做:

val rdd1 = sc.textFile("/home/user1/Documents/TestingScala/actress" 
val splitRdd = rdd1.map(line => line.split(",")) 
splitRdd.foreach(println) 

,但它給我一個錯誤:

[Ljava.lang.String;@7741fb9 
[Ljava.lang.String;@225f63a5 
[Ljava.lang.String;@63640bc4 
[Ljava.lang.String;@1354c1de 
+1

這不是一個錯誤消息,這是一堆字符串的object-id。 – Malvolio

+0

@Malvolio你能告訴我如何刪除該錯誤 – user225508

+0

從'split'的結果調用'toList'。 – Reactormonk

回答

5

[Ljava.lang.String;@7741fb9是不是一個錯誤,這是重量打印 當您嘗試打印陣列。

[ - 一個一維數組

L - 數組包含一個類或接口

java.lang.String - 對象數組

@在類型 - 加入綰

7741fb9該對象的哈希碼。

要打印String array你可以試試這個代碼:

import scala.runtime.ScalaRunTime._ 
splitRdd.foreach(array => println(stringOf(array))) 

Source

0

這是不是一個錯誤。我們也可以使用flatMap()這裏爲了避免混淆,

val rdd1 = sc.textFile("/home/user1/Documents/TestingScala/actress" 
rdd1.flatMap(line => line.split(",")).foreach(println) 

這裏,輸入功能地圖返回單個元件(陣列),而返回flatMap元件(0或更多)的列表。此外,flatMap的輸出也變平了。

0

由於它是csv文件,封裝爲行封裝的&,因此需要使用正則表達式讀取文件。簡單的拆分不起作用。

0

嘗試此轉換RDD[String]RDD[String,String]

val rdd1 = sc.textFile("/home/user1/Documents/TestingScala/actress" 
val splitRdd = rdd1.map(line => (line.split(",")(0), line.split(",")(1))) 

上面一行返回RDD爲鍵,值對[Tuple] RDD。