Spark自定义编码器 - 我可以删除/重命名列

时间:2018-03-08 13:25:36

标签: apache-spark apache-spark-sql

我正在编写一个def,允许用户通过仅指定case类型来将行导入JDBC中的case类(我将提供编码器)

列名是法语的,我想知道是否可以编写一个编码器,将带有name1 -> T1name2 -> T2列的数据帧转换为数据集[T],其中T是案例class SomeCaseClass(name1': T1, name2': T2...)

总结一下,我可能想要重命名或省略某些列,但类型不会改变。

我意识到我可以做类似以下的事情:

spark.sqlContext.read
  .format("jdbc")
  .option("driver", jdbcConfig.driver)
  .option("url", jdbcConfig.url)
  .option("dbtable", table)
  .option("user", jdbcConfig.user)
  .option("password", jdbcConfig.password)
  .load
  .toDF(Utils.caseClassConstructorParams[T].keys.toSeq: _*)
  .as[T]

然而,这似乎效率较低,我不能删除列,我不能保证列将以与我的case类构造函数参数相同的顺序返回。

欢呼任何建议。

0 个答案:

没有答案