如何在 spark-java 项目中的信息/调试级别记录 spark 数据集 printSchema

Shy*_*yam 1 java sql scala apache-spark apache-spark-sql

试图将我的 spark scala 项目转换为 spark-java 项目。我有一个登录 Scala 如下

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.
    }
Run Code Online (Sandbox Code Playgroud)

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

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 

}
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法,但没有任何方法可以在调试/信息模式下记录 printSchema。

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

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

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

Ach*_*eus 5

您可以使用df.schema.treeString. 与Voiddf.printSchema. 这在 Scala 中是正确的,我相信在 Java 中也是如此。如果这有帮助,请告诉我。

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 = ()
Run Code Online (Sandbox Code Playgroud)