我当前正在尝试将Spark的DataFrame的执行计划存储到HDFS(通过dataframe.explain(true)命令)
我发现的问题是,当我使用" dimend(true)命令"时,我可以看到命令行和日志的输出,但是,如果我创建一个文件(让您说一个文件)。txt)带有dataframe的内容解释该文件将显示为空。
我相信这个问题与火花的配置有关,但我无法在Internet中找到有关此信息的任何信息
(对于那些想使用解释功能的数据框架执行的人,请参阅https://jaceklaskowski.gitbooks.io/mastering-apache-apache-spark/spark/spark-sql-dataset-operators.html#Explain)
如果我创建了一个用数据框的内容的文件(让您说的.txt)
您到底是如何实现这一目标的?
explain
将其结果写入控制台,使用println
,并返回Unit
,如DataSet.Scala:
def explain(extended: Boolean): Unit = {
val explain = ExplainCommand(queryExecution.logical, extended = extended)
sparkSession.sessionState.executePlan(explain).executedPlan.executeCollect().foreach {
// scalastyle:off println
r => println(r.getString(0))
// scalastyle:on println
}
}
因此,除非您将控制台输出重定向到您的文件(以及印刷到控制台的其他内容...),您将无法将explain
的输出写入文件。
我发现的最佳方法是在运行作业时将输出重定向到文件。我使用了以下命令:
spark-shell --master yarn -i test.scala > getlogs.log
我的scala文件具有以下简单命令:
val df = sqlContext.sql("SELECT COUNT(*) FROM testtable")
df.explain(true)
exit()