Я создаю блокнот Databricks для циклического прохождения всех файлов в моем озере данных и создания одного измерения продукта.
Все ли хорошо работает для небольшого диапазона дат (менее 15), но после достижения более 20 дней задания начинают выполняться дольше, а работа ноутбука занимает много времени (я перестал поливать после 3часов).
Я проверил наше отставание по stderr и нашел что-то странное.Все задания выполняются менее чем за одну секунду, но между завершением задания и CoarseGrainedExecutorBackend существует длительное время ожидания.
Я не знаю, что делает CoarseGrainedExecutorBackend, но время ожидания составляет до 3 минут.
Вот скриншот аномалии:
Вот код, используемый для создания измерения:
//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
}
МожетКто-нибудь объяснит мне, что происходит, или предоставит руководство по улучшению нашего процесса?это однократный процесс для исторических файлов.