使用其他数据集的一部分创建 Spark 数据集
Create Spark dataset with parts of other dataset
我正在尝试通过从另一个数据集获取间隔来创建一个新数据集,例如,将数据集 1 视为输入,将数据集 2 视为输出:
dataset1 = [1, 2, 3, 4, 5, 6]
dataset2 = [1, 2, 2, 3, 3, 4, 4, 5, 5, 6]
我设法使用数组做到了这一点,但是对于 mlib,需要一个数据集。
我的数组代码:
def generateSeries(values: Array[Double], n: Int): Seq[Array[Float]] = {
var res: Array[Array[Float]] = new Array[Array[Float]](m)
for(i <- 0 to m-n){
res :+ values(i to i + n)
}
return res
}
FlatMap 似乎是可行的方法,但是函数如何在数据集中搜索下一个值?
这里的问题是数组与数据集完全不同。 DataSet 是无序的并且没有索引,因此从数组的角度思考对您没有帮助。寻找一个 Seq 并在根本不使用索引和位置的情况下处理它。
因此,要在 DataSet 上表示类似数组的行为,您需要创建自己的索引。这只需将值与我们表示的 "abstract array" 中的位置配对即可完成。
因此您的 DataSet 的类型将类似于 [(Int,Int)]
,其中第一个是索引,第二个是值。它们将无序到达,因此您需要以更实用的方式重新设计您的逻辑。目前还不清楚你想要达到什么目的,但我希望我给了你一个提示。否则在对我的回答的评论中更好地解释预期结果,我将进行编辑。
我正在尝试通过从另一个数据集获取间隔来创建一个新数据集,例如,将数据集 1 视为输入,将数据集 2 视为输出:
dataset1 = [1, 2, 3, 4, 5, 6]
dataset2 = [1, 2, 2, 3, 3, 4, 4, 5, 5, 6]
我设法使用数组做到了这一点,但是对于 mlib,需要一个数据集。
我的数组代码:
def generateSeries(values: Array[Double], n: Int): Seq[Array[Float]] = {
var res: Array[Array[Float]] = new Array[Array[Float]](m)
for(i <- 0 to m-n){
res :+ values(i to i + n)
}
return res
}
FlatMap 似乎是可行的方法,但是函数如何在数据集中搜索下一个值?
这里的问题是数组与数据集完全不同。 DataSet 是无序的并且没有索引,因此从数组的角度思考对您没有帮助。寻找一个 Seq 并在根本不使用索引和位置的情况下处理它。
因此,要在 DataSet 上表示类似数组的行为,您需要创建自己的索引。这只需将值与我们表示的 "abstract array" 中的位置配对即可完成。
因此您的 DataSet 的类型将类似于 [(Int,Int)]
,其中第一个是索引,第二个是值。它们将无序到达,因此您需要以更实用的方式重新设计您的逻辑。目前还不清楚你想要达到什么目的,但我希望我给了你一个提示。否则在对我的回答的评论中更好地解释预期结果,我将进行编辑。