Spark SQL将数据集转换为数据框

时间:2018-10-11 14:47:13

标签: scala apache-spark apache-spark-sql

如何将数据集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()。输出结果。但是这没有发生吗?为什么?任何原因?我该如何实现?

1 个答案:

答案 0 :(得分:5)

带有Product Encoder的输出模式仅根据其构造函数签名确定。因此,体内发生的一切都被简单地丢弃了。

您可以

empData.map(x => (x, x.newColumn)).toDF("value", "newColumn")