在spark scala应用程序中将df.show()的内容保存为字符串
我需要将df.show()的输出保存为字符串,以便直接通过电子邮件发送 例如,以下示例取自官方spark文档:在spark scala应用程序中将df.show()的内容保存为字符串,scala,apache-spark,log4j,Scala,Apache Spark,Log4j,我需要将df.show()的输出保存为字符串,以便直接通过电子邮件发送 例如,以下示例取自官方spark文档: val df = spark.read.json("examples/src/main/resources/people.json") // Displays the content of the DataFrame to stdout df.show() // +----+-------+ // | age| name| // +----+-------+ // |null|M
val df = spark.read.json("examples/src/main/resources/people.json")
// Displays the content of the DataFrame to stdout
df.show()
// +----+-------+
// | age| name|
// +----+-------+
// |null|Michael|
// | 30| Andy|
// | 19| Justin|
// +----+-------+
我需要将上面的表保存为一个字符串,并在控制台中打印。我确实查看了log4j来打印日志,但是没有发现任何关于只记录输出的信息
有人能帮我吗?解决方法是将标准输出重定向到变量:
val baos = new java.io.ByteArrayOutputStream();
val ps = new java.io.PrintStream(baos);
val oldPs = Console.out
Console.setOut(ps)
df.show()
val content = baos.toString()
Console.setOut(oldPs)
注意,我这里有一个弃用警告
您还可以重新实现方法
Dataset.showString
,该方法生成数据。它在后台使用take
。也许这也是一个创建公共关系以公开的好时机?:) scala.Console
有一个而不带的方法来处理这种事情:
val outCapture = new ByteArrayOutputStream
Console.withOut(outCapture) {
df.show()
}
val result = new String(outCapture.toByteArray)
将尝试使用注释更新。。现在就看。这已经得到了回答: