首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在spark- java项目中进行info/debug级别的spark Dataset printSchema日志记录

如何在spark- java项目中进行info/debug级别的spark Dataset printSchema日志记录
EN

Stack Overflow用户
提问于 2019-04-19 01:40:04
回答 2查看 4.1K关注 0票数 1

尝试将我的spark scala项目转换为spark-java项目。我在scala中有一个日志,如下所示

代码语言:javascript
复制
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

    class ClassName{
      val logger  = LoggerFactory.getLogger("ClassName")
      ...
      val dataframe1 = ....///read dataframe from text file.
      ...

      logger.debug("dataframe1.printSchema : \n " + dataframe1.printSchema; //this is working fine.
    }

现在,我正在尝试用java 1.8编写它,如下所示

代码语言:javascript
复制
public class ClassName{

    public static final Logger logger  = oggerFactory.getLogger("ClassName"); 
      ...
     Dataset<Row> dataframe1 = ....///read dataframe from text file.
     ...

     logger.debug("dataframe1.printSchema : \n " + dataframe1.printSchema()); //this is not working 

}

我尝试了几种方法,但在调试/信息模式下记录printSchema都不起作用。

dataframe1.printSchema() //这实际上返回void,因此无法附加到字符串。

spark-java生产级项目的日志记录到底是如何完成的?要登录调试,我需要遵循的最佳方法是什么?

如何处理上述场景?即java中的log.debug( dataframe1.printSchema() )?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-19 02:30:52

您可以使用df.schema.treeString。当与df.printSchema返回的java中的Void的Unit()等效项进行比较时,该函数返回一个字符串。这在Scala中是正确的,我相信在Java.Let中也是如此,我知道这是否有帮助。

代码语言:javascript
复制
scala> val df = Seq(1, 2, 3).toDF()
df: org.apache.spark.sql.DataFrame = [value: int]

scala> val x = df.schema.treeString
x: String =
"root
 |-- value: integer (nullable = false)
"

scala> val y = df.printSchema
root
 |-- value: integer (nullable = false)

y: Unit = ()
票数 5
EN

Stack Overflow用户

发布于 2019-04-19 01:46:36

printSchema方法已经将架构打印到控制台,而不以任何形式返回它。您可以简单地调用该方法并将控制台输出重定向到其他地方。还有其他类似于this one的变通方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55751205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档