繁体   English   中英

在spark-scala app中将df.show()的内容保存为字符串

[英]Saving contents of df.show() as a string in spark-scala app

我需要将df.show()的输出保存为字符串,以便我可以直接通过电子邮件发送。

例如,下面的例子来自官方的火花文档,:

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来打印日志,但是没有关于仅记录输出的任何信息。

有人可以帮我吗?

scala.Console有一个withOut方法用于这种事情:

val outCapture = new ByteArrayOutputStream
Console.withOut(outCapture) {
  df.show()
}
val result = new String(outCapture.toByteArray)

解决方法是将标准输出重定向到变量:

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在后台。 也许这也是创建PR以使showString公开的好时机? :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM