我使用spark从数据库中读取并在hdfs中写为镶木地板文件。这是代码段。
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,因此实现起来会更加棘手。
谢谢大家..
答案 0 :(得分:1)
Parquet非常快,所以你可以尝试return spark.sqlContext().read.parquet("path").count()
。