Performance Spark时间序列-如何并行化代码?

Performance Spark时间序列-如何并行化代码?,performance,apache-spark,time-series,Performance,Apache Spark,Time Series,我有一个具有以下模式的数据集 inputData.printSchema() |-- seriesKeys: string (nullable = true) |-- timestamp: long (nullable = true) |-- targetSeries: double (nullable = true) 使用sparkts库,我想以分布式方式为大量时间序列生成ARIMA预测。通常,我可以使用TimeSeriesRDD来解决这个问题。根据我的理解,要求所有系列都具有相同的开

我有一个具有以下模式的数据集

inputData.printSchema()
 |-- seriesKeys: string (nullable = true)
 |-- timestamp: long (nullable = true)
 |-- targetSeries: double (nullable = true)
使用sparkts库,我想以分布式方式为大量时间序列生成ARIMA预测。通常,我可以使用TimeSeriesRDD来解决这个问题。根据我的理解,要求所有系列都具有相同的开始和结束日期,这对于我的数据集来说并非如此。所以我需要写一个代码来处理这种情况

目前,我的代码的编写方式是所有内容都在驱动程序上执行,而不是在执行者之间分发:

val seriesKeys: Array[Row] = inputData.select("seriesKeys").distinct().collect()

  val forecastArray : Array[Array[Double]] = seriesKeys.map(key => {
  val inputDataTemp : Dataset[mySchema] = inputData.where(s"seriesKeys ='$key'")
  val dfTS : DataFrame = inputDataTemp.select("targetSeries")
  val rddTS : RDD[Double] = dfTS.rdd.map(row => row.getAs[Double]("targetSeries"))
  val dvTS: Vector = Vectors.dense(rddTS.collect())
  val dvForecast: Vector = ARIMA.autoFit(dvTS, 5, 2, 5).forecast(dvTS, 12)
  dvForecast.toArray
})

我如何重新设计代码以允许并行执行以提高性能?

这不是电话双关语,但不要呼叫
收集
。您需要使用分布式抽象,如
RDD
Dataset/DataFrame
。您现在拥有的
系列密钥
不是分布式的,因为它是一个
数组
这不是电话双关语,但不要呼叫
收集
。您需要使用分布式抽象,如
RDD
Dataset/DataFrame
。您现在拥有的
系列密钥
不是分布式的,因为它是一个
阵列

我的spark版本是2.1.0我的spark版本是2.1.0