如何在spark-java项目的info / debug级别中记录spark数据集printSchema
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在spark-java项目的info / debug级别中记录spark数据集printSchema相关的知识,希望对你有一定的参考价值。
试图将我的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 :
" + 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 :
" + dataframe1.printSchema()); //this is not working
}
我尝试了几种方法,但没有任何方法可以在调试/信息模式下记录printSchema。
dataframe1.printSchema()//这实际上返回了void,因此无法附加到字符串。
如何实际记录spark-java生产等级项目?登录调试需要遵循的最佳方法是什么?
如何处理上述情况?即java中的log.debug(dataframe1.printSchema())?
你可以使用df.schema.treeString
。与Void
返回的java中的df.printSchema
的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 = ()
printSchema
方法已经将模式打印到控制台,而不以任何形式返回它。您只需调用该方法并将控制台输出重定向到其他位置即可。还有其他的解决方法,如this one。
以上是关于如何在spark-java项目的info / debug级别中记录spark数据集printSchema的主要内容,如果未能解决你的问题,请参考以下文章
如何在 react-native 项目中保存 info.plist 中的更改
Xcode 项目中的两个 info.plist 文件如何工作?
对于 Flutter 项目如何在 android studio 中添加 firebase 的 GoogleService-Info.plist 文件