在 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 中转换它而不是采用这种方法(特别是如果数据量很大)。