Scala Spark创建DataFrame后printSchema为空、无数据是什么原因?
问题根因
你写的DataFrame创建逻辑本身没有错误,空输出是打印代码的写法有误导致的:
printSchema()、show()均是Spark DataFrame的行动算子,核心作用是直接向控制台打印内容,返回值类型为Unit(Scala中的无返回值类型)。将这两个方法放入字符串插值中时,只能拿到Unit对应的默认输出(),才会让你误以为Schema和数据为空,实际DataFrame已经正常加载了结构和数据。- 这两个方法执行时已经直接把Schema、数据输出到标准控制台了,你可以直接查看控制台的原始输出,就能看到完整的结构和数据。
正确打印写法
方式1:直接调用打印方法(推荐)
不需要包裹在logger.info中,直接执行方法即可:
// 直接打印Schema到控制台 df.printSchema() // 直接打印数据到控制台,false表示不截断长字段 df.show(false)
方式2:获取字符串内容输出到日志
如果需要把Schema、数据内容写入日志文件,可以调用返回字符串的对应方法:
// 获取Schema的字符串形式 logger.info(s"df printschema: ${df.schema.treeString}") // 获取DataFrame展示内容的字符串形式,参数是展示行数、是否截断 logger.info(s"df show: ${df.showString(5, truncate = false)}")
内容的提问来源于stack exchange,提问作者Code Geek
相关产品推荐
相关产品推荐

