簡體   English   中英

如何在Spark / Java項目的信息/調試級別中記錄Spark Dataset PrintSchema

[英]How to do logging of spark Dataset printSchema in info/debug level in spark- java project

試圖將我的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.
    }

現在我正在嘗試在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 

}

我嘗試了幾種方法,但是在調試/信息模式下無法記錄printSchema。

dataframe1.printSchema()//實際上返回void,因此無法追加到字符串。

spark-java生產級項目實際上是如何進行日志記錄的? 登錄調試需要遵循的最佳方法是什么?

如何處理以上情況? 即log.debug(dataframe1.printSchema())在Java中?

printSchema方法已經將模式打印到控制台,而沒有以任何形式返回它。 您可以簡單地調用該方法,並將控制台輸出重定向到其他位置。 還有其他的解決辦法像這一個

您可以使用df.schema.treeString df.printSchema返回的java中Void Unit()等效項相比,它返回​​一個字符串。 在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 = ()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM