如何获取写入的记录数(使用DataFrameWriter&#39的保存操作)?

时间:2017-05-12 09:30:27

标签: scala apache-spark apache-spark-sql

使用spark保存记录时,有没有办法获取写入的记录数?虽然我知道它目前不符合规范,但我希望能够做到这样的事情:

val count = df.write.csv(path)

或者,能够进行步骤结果的内联计数(最好不使用标准累加器)将(几乎)同样有效。即:

dataset.countTo(count_var).filter({function}).countTo(filtered_count_var).collect()

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

我使用SparkListener可以拦截您可以用来访问任务指标的onTaskEndonStageCompleted个事件。

任务指标为您提供了Spark用于在SQL选项卡中显示指标的累加器(在查询的详细信息中)。

web UI / Details for Query

例如,以下查询:

spark.
  read.
  option("header", true).
  csv("../datasets/people.csv").
  limit(10).
  write.
  csv("people")

给出了10个输出行,因此Spark知道它(你也可以)。

enter image description here

您还可以浏览Spark SQL' QueryExecutionListener

  

查询执行侦听器的接口,可用于分析执行指标。

您可以使用QueryExecutionListener spark.listenerManager注册scala> :type spark.listenerManager org.apache.spark.sql.util.ExecutionListenerManager scala> spark.listenerManager. clear clone register unregister

numOutputRows

我认为它更接近"裸机",但以前没有使用过。

ExecutionListenerManager(在评论部分中)提到使用QueryExecution结构化查询访问scala> :type q org.apache.spark.sql.DataFrame scala> :type q.queryExecution.executedPlan.metrics Map[String,org.apache.spark.sql.execution.metric.SQLMetric] q.queryExecution.executedPlan.metrics("numOutputRows").value SQL指标。值得考虑的事情。

from pymongo import MongoClient

MONGO_HOST = "ds123456.mlab.com"
MONGO_PORT = 23456
MONGO_DB = "db name"
MONGO_USER = "Username"
MONGO_PASS = "password"
connection = MongoClient(MONGO_HOST, MONGO_PORT)
db = connection[MONGO_DB]
db.authenticate(MONGO_USER, MONGO_PASS)