提问者:小点点

Spark 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个答案

匿名用户

假设<code>input</code>是一个多行字符串。

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))

它可以通过附加过滤后的<code>raw</code>集合来修复。

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))

我认为组合的顺序无关紧要。

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