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