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(","))
接着我 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(","))