如何验证历史数据?

时间:2018-07-03 14:32:06

标签: scala apache-spark-sql bigdata

当前,我们正在使用日历实例读取日期,以便使用sparksql来选择最近一个月的记录。现在我们需要:如果在前一天添加了额外的事件,我们还必须能够手动插入摘要开始和结束日期,以防我们需要在先前时间段内手动重新执行工作: 例如:手动重新运行表可能如下所示:

rprtng_period_type_cd  summary_start_date summary_end_date  summary_iv
M                         2018-01-01      2018-01-31        2018-01
D                         2018-03-05      2018-03-05        2018-03-05
D                         2018-03-27      2018-03-27        2018-03-27

这应该告诉工作以计算1月18日的月度摘要和两份每日摘要,一份为3月5日,一份为3月27日

作业应使用summary_start_date summary_end_date,并确保仅在这两个日期之间具有event_dt的事件才包括在计算中。

我当前的代码段如下:

def execute(): Dataframe = {
  //log files
  val hivecntxt = SparkContextLoader.hiveContext
  val eventsourceTable= cusotmermetricConstants.source_table

  // Calendar information
  val abc = Calendar.getInstance
  abc.add(Calendar.month, -1)
  var month = abc.get(Calendar.MONTH)
  var year = abc.get(Calendar.YEAR)
  var fileMonth = month + 1
  var monthStr = if (fileMonth<=9) {
    monthStr ="0" + fileMonth.toString
  } else {
    monthStr = fileMonth.toString
  }

  //testing purpose
  monthStr = "11"
  year = 2016
  val monthlyEventDf = hiveContext.sql("select * from " + referenceDB + " ." + eventsourceTable + "where(unix_timestamp(event_Dt, "yyyy-mm"))")=unix_timestamp("' +year+ "-"+"monthstr"+"',+'yyyy-MM'))")
  val uniquedf = monthlyEventDf.repartition(col("event_Id")).withColumn("rank",rank().over(Window.partitionBy("event_Id").orderBy(desc("somevalue")))
  val monthlyEventfinal = monthlyEventDf.persist(StorageLevel.Memory_AND_DISK)

  return monthlyEventfinal
}

在哪里可以编辑当前模块中的需求 寻找建议

1 个答案:

答案 0 :(得分:0)

您可以使用filter功能选择如下范围内的记录

//Input df

+---+----------+----------+
| cd|start_date|  end_date|
+---+----------+----------+
|  M|2018-01-01|2018-01-31|
|  D|2018-05-03|2018-05-03|
|  D|2018-03-27|2018-03-27|
+---+----------+----------+

//Parameter startDate and endDate
val endDate="2018-05-03"

val endDate="2018-05-03"

//Filter condition
df.filter(s"start_date>='$startDate' and end_date<='$endDate'").show

//Sample Output: 
+---+----------+----------+
| cd|start_date|  end_date|
+---+----------+----------+
|  D|2018-05-03|2018-05-03|
|  D|2018-03-27|2018-03-27|
+---+----------+----------+

我希望这会对您有所帮助,如果您想对过滤后的记录进行任何计算,则必须将列传递给udf