如何将数据集obj转换为数据框?在我的示例中,我将JSON文件转换为数据框,然后转换为DataSet。在数据集中,我添加了一些附加属性(newColumn
)并将其转换回数据框。这是我的示例代码:
val empData = sparkSession.read.option("header", "true").option("inferSchema", "true").option("multiline", "true").json(filePath)
.....
import sparkSession.implicits._
val res = empData.as[Emp]
//for (i <- res.take(4)) println(i.name + " ->" + i.newColumn)
val s = res.toDF();
s.printSchema()
}
case class Emp(name: String, gender: String, company: String, address: String) {
val newColumn = if (gender == "male") "Not-allowed" else "Allowed"
}
但是,我希望在newColumn
中添加新的列名s.printschema()
。输出结果。但是这没有发生吗?为什么?任何原因?我该如何实现?
答案 0 :(得分:5)
带有Product
Encoder
的输出模式仅根据其构造函数签名确定。因此,体内发生的一切都被简单地丢弃了。
您可以
empData.map(x => (x, x.newColumn)).toDF("value", "newColumn")