Scala RDD [String]到RDD [String,String]

时间:2016-10-08 01:08:07

标签: scala dictionary apache-spark rdd scala-collections

我有RDD[String],其中包含以下数据:

数据格式:('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

4 个答案:

答案 0 :(得分:5)

  

[Ljava.lang.String;@7741fb9不是错误,这是wt打印   当你尝试打印一个数组时。

[ - 一维数组

L - 数组包含类或接口

java.lang.String - 数组中对象的类型

@ - 将字符串连接在一起

7741fb9对象的哈希码。

  

要打印String array,您可以尝试以下代码:

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

Source

答案 1 :(得分:0)

这不是错误。我们也可以在这里使用flatMap()来避免混淆,

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

这里,map的输入函数返回单个元素(数组),而flatMap返回元素列表(0或更多)。此外,flatMap的输出也是平坦的。

答案 2 :(得分:0)

因为它是带字段封闭的csv文件&行封闭,您需要使用正则表达式读取文件。简单拆分不起作用。

答案 3 :(得分: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返回。