我有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
答案 0 :(得分:5)
[Ljava.lang.String;@7741fb9
不是错误,这是wt打印 当你尝试打印一个数组时。
[
- 一维数组
L
- 数组包含类或接口
java.lang.String
- 数组中对象的类型
@
- 将字符串连接在一起
7741fb9
对象的哈希码。
要打印
String array
,您可以尝试以下代码:
import scala.runtime.ScalaRunTime._
splitRdd.foreach(array => println(stringOf(array)))
答案 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返回。