Spark Scala - 将列拆分为多行

时间:2016-09-05 13:02:10

标签: scala apache-spark apache-spark-mllib

关注我在此发布的问题:

Spark Mllib - Scala

我怀疑另一个......有可能像这样转换数据集:

2,1,3
1
3,6,8

进入这个:

2,1
2,3
1,3
1
3,6
3,8
6,8

基本上我想发现电影之间的所有关系。可以这样做吗?

我目前的代码是:

val input = sc.textFile("PATH")
val raw = input.lines.map(_.split(",")).toArray
val twoElementArrays = raw.flatMap(_.combinations(2))
val result = twoElementArrays ++ raw.filter(_.length == 1)

1 个答案:

答案 0 :(得分:2)

鉴于input是一个多行字符串。

scala> val raw = input.lines.map(_.split(",")).toArray
raw: Array[Array[String]] = Array(Array(2, 1, 3), Array(1), Array(3, 6, 8))

以下方法在您的示例中丢弃单元素数组1

scala> val twoElementArrays = raw.flatMap(_.combinations(2))
twoElementArrays: Array[Array[String]] = Array(Array(2, 1), Array(2, 3), Array(1, 3), Array(3, 6), Array(3, 8), Array(6, 8))

可以通过附加已过滤的raw集合来修复它。

scala> val result = twoElementArrays ++ raw.filter(_.length == 1)
result: Array[Array[String]] = Array(Array(2, 1), Array(2, 3), Array(1, 3), Array(3, 6), Array(3, 8), Array(6, 8), Array(1))

我相信组合顺序无关紧要。

<小时/> 的更新 SparkContext.textFile返回行的RDD,因此可以插入:

val raw = rdd.map(_.split(","))