Azure Databricks [Spark-Scala]

时间:2019-05-03 19:36:41

标签: scala azure apache-spark databricks

我正在构建一个Databricks笔记本,以遍历数据湖中的所有文件并构建一个产品维度。

在很小的日期范围内(少于15天),一切都可以正常工作,但是一旦我达到20天以上,工作就会花更长的时间才能完成,笔记本需要花一些时间才能运行(我放弃了3个小时的等待时间)。

我检查了stderr的积压,发现了一些奇怪的东西。 所有工作都在不到一秒钟的时间内完成,但是完成工作与CoarseGrainedExecutorBackend之间的等待时间很长。

我不知道CoarseGrainedExecutorBackend在做什么,但是等待时间长达3分钟。

以下是异常情况的屏幕截图:

stderr

以下是用于创建尺寸的代码:

//Create variables to be used in loop
val firstHistDate = "20190410"
var loopCal = Calendar.getInstance
loopCal.add(Calendar.DATE, -1)

var loopDate = loopCal.getTime
var loopDay = new SimpleDateFormat("dd").format(loopDate)
var loopMonth = new SimpleDateFormat("MM").format(loopDate)
var loopYear = new SimpleDateFormat("YYYY").format(loopDate)

var pathLoop = ""
var counter = 0
var loopDateFormatted = ""

// Create Dataframe for the first date

var df1 = sqlContext.read.format("csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .load(pathRaw)
  .selectExpr("PROD_ID","PROD_NOME","PROD_EAN","PROD_DEPARTAMENTO_ID","PROD_DEPARTAMENTO_NOME","PROD_CATEGORIA_ID","PROD_CATEGORIA_NOME", "PROD_SUBCATEGORIA_ID", "PROD_SUBCATEGORIA_NOME","PROD_MARCA_ID","PROD_MARCA_NOME","PROD_VOLUME_ID","PROD_VOLUME_NOME","PROD_UNIDADE_ID","PROD_UNIDADE_NOME","CATEGORIA")
 .dropDuplicates("PROD_ID")

//Initiate loop over the files for the previous 14 days
while (loopDateFormatted != firstHistDate) 
  {
  //Creates path for next file
  loopCal.add(Calendar.DATE, -1)
  loopDate = loopCal.getTime
  loopDay = new SimpleDateFormat("dd").format(loopDate)
  loopMonth = new SimpleDateFormat("MM").format(loopDate)
  loopYear = new SimpleDateFormat("YYYY").format(loopDate)

  pathLoop = s"$pathADLS/$dbName/$tableName/Brazil/LandedFiles/$loopYear/$loopMonth/$loopDay/${tableName}_$loopYear$loopMonth$loopDay.csv" 

  //Appends new data set to DF
  var df2 = sqlContext.read.format("csv")
  .option("header", "true")
  .option("inferSchema", "true")
  .load(pathLoop)
  .selectExpr("PROD_ID","PROD_NOME","PROD_EAN","PROD_DEPARTAMENTO_ID","PROD_DEPARTAMENTO_NOME","PROD_CATEGORIA_ID","PROD_CATEGORIA_NOME", "PROD_SUBCATEGORIA_ID", "PROD_SUBCATEGORIA_NOME","PROD_MARCA_ID","PROD_MARCA_NOME","PROD_VOLUME_ID","PROD_VOLUME_NOME","PROD_UNIDADE_ID","PROD_UNIDADE_NOME","CATEGORIA")
  .dropDuplicates("PROD_ID")

  var df3 = df2.select("PROD_ID").except(df1.select("PROD_ID"))

  var df31 = df3.withColumnRenamed("PROD_ID","ID")

  var df4 = df31.join(df2, df31("ID")===df2("PROD_ID"), "left")

  df1 = df1.union(df4.drop("ID"))

  loopDateFormatted = loopYear+loopMonth+loopDay
  }

有人可以向我解释发生了什么事或提供一些指导以改善我们的流程吗?这是历史文件的一次性处理。

0 个答案:

没有答案
相关问题