scala中数组到spark数据集的转换

3pvhb19x  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(414)

我正在尝试从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个数组的大小都相同,为了填充第一个数组,另一个数据集的列rawvalue被转换成一个数组,如上所示。
在完成所有的计算之后,我想创建一个数据集,它有4个独立的列,并且每一列都代表4个独立的数组。
那么,基本上如何从数组创建数据集呢?我也在努力做同样的事。
请帮忙。

1zmg4dgp

1zmg4dgp1#

你只需要把他们聚在一起:

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中转换它,而不是采用这种方法(尤其是在数据大小很大的情况下)。

相关问题