Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在spark scala应用程序中将df.show()的内容保存为字符串_Scala_Apache Spark_Log4j - Fatal编程技术网

在spark scala应用程序中将df.show()的内容保存为字符串

在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

我需要将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|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)

将尝试使用注释更新。。现在就看。这已经得到了回答: