原始数据-(几天缺少数据)
所需的O / P-(即,为丢失的值填写先前的已知值)
要求-用先前的已知值填充所有丢失的数据。
我当前的实施-(POC)
import org.apache.spark.sql.expressions.Window
val rawDataDf = Seq(("2020-09-25","product1","4.4"),
("2020-09-28","product1","4.1"),
("2020-09-30","product1","4.2"))
.toDF("datetime","product","quantity")
.select(to_timestamp($"datetime") as "datetime",$"product",$"quantity".cast("float"))
rawDataDf.createOrReplaceTempView("rawDataDfView")
val new_combinedDf = spark.sql("select a.*,(select distinct product from rawDataDfView) as product,b.quantity from dataDateDfView a left join rawDataDfView b on a.dates = b.datetime ")
display(new_combinedDf)
new_combinedDf.createOrReplaceTempView("finalview")
new_combinedDf.withColumn("quantity",last("quantity",true).over(Window.partitionBy("product").orderBy("dates"))).show()
这个POC(基本理解水平)的逻辑按预期工作,但是我想知道是否可以使用其他更易于实现,可扩展和可定制的东西。
Facebook Prophet可悲的是,我无法在Spark-scala中直接使用它,因为Prophet仅受Python或R支持。 引用链接-https://github.com/facebook/prophet/issues/523
* 更新
我已经使用Cloudera Sparkts的TimeSeriesRDD成功实现了这一目标。 但是问题在于,Cloudera SparksTs自2016年以来未见任何更新,我担心它可能已经达到生命周期支持。
我正在寻找可以满足我的要求的兼容插补逻辑/库。 预先感谢。