保存后的 Spark 数据集计数

Spark dataset count after save

我正在使用 spark 从数据库中读取数据并将其写入 hdfs 作为 parquet 文件。这是代码片段。

private long etlFunction(SparkSession spark){
    spark.sqlContext().setConf("spark.sql.parquet.compression.codec", "SNAPPY");    
    Properties properties = new Properties();
    properties.put("driver","oracle.jdbc.driver");
    properties.put("fetchSize","5000");     
    Dataset<Row> dataset = spark.read().jdbc(jdbcUrl, query, properties);
    dataset.write.format("parquet”).save("pdfs-path");  
    return dataset.count();
}

当我查看 spark ui 时,在写入期间我有写入的记录统计信息,在查询计划下的 sql 选项卡中可见。

虽然计数本身就是一项繁重的工作。

有人可以建议以最优化的方式获取计数的最佳方法吗?

要补充的是,有一个解决方案被提及为重复,涉及使用 sparkListener 进行计数。我大量重复使用 sparkSession,因此实现起来会更加棘手。

谢谢大家..

Parquet 的计数速度非常快,您可以试试 return spark.sqlContext().read.parquet("path").count()