Details
Description
Current Livy's StatementProgressListener is an implementation based on SparkListener, whereas the signature of SparkListener was changed in Spark2.0+, which means if Livy code is built against Spark 1.6, then it cannot be run on Spark2, vice versa.
So we have to avoid directly using SparkListener, here propose to use a new way to calculate the progress of statement.