Spark Scala - 将列拆分为多行

Spark Scala - Split columns into multiple rows

接着我 post 在这里提出的问题:

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)

鉴于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 returns 行的 RDD,因此可以插入为:

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