将RDD [String]转换为RDD [Array [String]]

时间:2016-03-27 14:23:55

标签: apache-spark

给定RDD{String],其中一行上的每个元素都以|字符分隔,例如:

aaa|bbb|ccc|ddd

将其转换为RDD[Array[String]的正确方法是什么,以便将上述内容表示为Array("aaa", "bbb", "ccc", "ddd")

以下想法:

val rddAsArray = rdd.map { x => Array(x.split("""\|""")) }

没有工作。 如

println(rddAsArray.foreach { _.mkString(",") })

仅打印:[[Ljava.lang.String;@4096711f

由于

1 个答案:

答案 0 :(得分:2)

夫妻俩:

尝试:

val rddAsArray = rdd.map(x => x.split("\\|"))

当您按照自己的方式创建RDD[Array[Array[String]]]时,您只需要RDD[Array[String]]

而你的println并没有按照你的想法行事。尝试:

rddAsArray.take(1).foreach(l => println(l.mkString(",")))

您需要take()RDD带入您的驱动程序 - 否则println会将其结果打印到执行人的stdout,您可能不会能够看到。您需要它打印到您的驱动程序stdout,因此take()。否则println需要嵌套在foreach中,而不是相反。