Время выполнения чтения базы данных в искре - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь найти время выполнения для приведенного ниже кода

public Dataset<Row> loadData(SparkSession spark, String url, String query, String driver) {
        long startTime=System.nanoTime();
        Dataset<Row> readDataFrame= spark.read()
                .format("jdbc")
                .option("url", url)
                .option("dbtable", query)
                .option("driver", driver)
                .load();
        long endTime=System.currentTimeMillis();
        System.out.println((endTime-startTime)/1000000);
        return readDataFrame;
    }

Приведенный выше код дал мне время как 20 мс. Теперь я добавил действие ниже, например

        long startTime=System.nanoTime();
        Dataset<Row> readDataFrame= spark.read()
                .format("jdbc")
                .option("url", url)
                .option("dbtable", query)
                .option("driver", driver)
                .load();
        long count=readDataFrame.count();
        long endTime=System.currentTimeMillis();
        System.out.println((endTime-startTime)/1000000);
        return readDataFrame;

Этот код дал мне 2000 мс в качестве ответа, что, я полагаю, является правильным.

Теперь у нас уже есть действие позже в коде и не хочу использовать persist, так как могут быть проблемы с памятью. Есть ли хороший способ найти время для этого readDataFrame?

1 Ответ

0 голосов
/ 05 мая 2020

Это плохой способ измерения времени, затрачиваемого на операции DataFrame.

Spark использует DAG для операций DataFrame. Если вы не вызовете какое-либо действие (например, подсчет) над этим DataFrame, Spark продолжит чтение в DataFrame в фоновом режиме. С другой стороны, преобразования являются ленивыми по своей природе, то есть они выполняются только тогда, когда они вызваны действием. Они не выполняются немедленно

Если у вас есть действие позже в коде, лучше не выполнять .count() сейчас.

Если вы хотите узнать время, затраченное на DataFrame прочтите до конца, рекомендуется заглянуть в журналы заданий Spark ..

...