在 Scala 中将数组转换为 Spark 数据集
Convert Arrays into Spark DataSet in Scala
我正在尝试从 4 个数组创建数据集。我有这样的数组:
// Array 1
val rawValues = rawData.select(collect_list("rawValue")).first().getList[Double](0).asScala.toArray
// Array 2
var trendValues = Array[Double]()
// Array 3
var seasonalValues = Array[Double]()
// Array 4
var remainder = Array[Double]()
我根据第一个数组的一些计算(此处未包括)填充了最后 3 个数组。所有 4 个数组的大小都相等,为了填充第一个数组,另一个数据集的 column-rawValue 被转换为一个数组,如上所示。
完成所有计算后,我想创建一个数据集,它有 4 个独立的列,每列代表以上 4 个独立的数组。
那么,基本上我如何从数组创建数据集?我也在努力做同样的事情。
请帮忙。
您只需要将它们组合在一个序列中即可:
case class ArrayMap(rawValues: Double, trendValues: Double, seasonalValues: Double, remainder: Double)
import spark.implicits._
val data = for(i <- arr1.indices) yield ArrayMap(arr1(i), arr2(i) ,arr3(i) ,arr4(i))
data.toDF()
//or else, but takes more steps
arr1.zip(arr2).zip(arr3).zip(arr4)
.map(a => ArrayMap(a._1._1._1, a._1._1._2, a._1._2, a._2))
.toSeq.toDF()
如果数组大小不同,则使用 zipAll
。
编辑:
我不确定数据如何向下流动的用例,但如果您尝试从 DataFrame 创建所有 4 个数组,我建议您在 DataFrame 中转换它而不是采用这种方法(特别是如果数据量很大)。
我正在尝试从 4 个数组创建数据集。我有这样的数组:
// Array 1
val rawValues = rawData.select(collect_list("rawValue")).first().getList[Double](0).asScala.toArray
// Array 2
var trendValues = Array[Double]()
// Array 3
var seasonalValues = Array[Double]()
// Array 4
var remainder = Array[Double]()
我根据第一个数组的一些计算(此处未包括)填充了最后 3 个数组。所有 4 个数组的大小都相等,为了填充第一个数组,另一个数据集的 column-rawValue 被转换为一个数组,如上所示。
完成所有计算后,我想创建一个数据集,它有 4 个独立的列,每列代表以上 4 个独立的数组。
那么,基本上我如何从数组创建数据集?我也在努力做同样的事情。
请帮忙。
您只需要将它们组合在一个序列中即可:
case class ArrayMap(rawValues: Double, trendValues: Double, seasonalValues: Double, remainder: Double)
import spark.implicits._
val data = for(i <- arr1.indices) yield ArrayMap(arr1(i), arr2(i) ,arr3(i) ,arr4(i))
data.toDF()
//or else, but takes more steps
arr1.zip(arr2).zip(arr3).zip(arr4)
.map(a => ArrayMap(a._1._1._1, a._1._1._2, a._1._2, a._2))
.toSeq.toDF()
如果数组大小不同,则使用 zipAll
。
编辑:
我不确定数据如何向下流动的用例,但如果您尝试从 DataFrame 创建所有 4 个数组,我建议您在 DataFrame 中转换它而不是采用这种方法(特别是如果数据量很大)。