Я пытаюсь распечатать счетчик данных, а затем первые несколько строк, прежде чем окончательно отправить его на дальнейшую обработку.
Странно, но после вызова count()
кадр данных становится пустым.
val modifiedDF = funcA(sparkDF)
val deltaDF = modifiedDF.except(sparkDF)
println(deltaDF.count()) // prints 10
println(deltaDF.count()) //prints 0, similar behavior with show
funcB(deltaDF) //gets null dataframe
Мне удалось проверить то же самое, используя deltaDF.collect.foreach(println)
и последующие вызовы count
.
Однако, если я не вызову count
или show
, а просто отправлю его как есть, funcB
получит весь DF с 10 строками.
Ожидается ли это?
Определение funcA()
и его зависимостей:
def funcA(inputDataframe: DataFrame): DataFrame = {
val col_name = "colA"
val modified_df = inputDataframe.withColumn(col_name, customUDF(col(col_name)))
val modifiedDFRaw = modified_df.limit(10)
modifiedDFRaw.withColumn("colA", modifiedDFRaw.col("colA").cast("decimal(38,10)"))
}
val customUDF = udf[Option[java.math.BigDecimal], java.math.BigDecimal](myUDF)
def myUDF(sval: java.math.BigDecimal): Option[java.math.BigDecimal] = {
val strg_name = Option(sval).getOrElse(return None)
if (change_cnt < 20) {
change_cnt = change_cnt + 1
Some(strg_name.multiply(new java.math.BigDecimal("1000")))
} else {
Some(strg_name)
}
}