2016-10-08 136 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。