我正在编写一个def,允许用户通过仅指定case类型来将行导入JDBC中的case类(我将提供编码器)
列名是法语的,我想知道是否可以编写一个编码器,将带有name1 -> T1
,name2 -> 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类构造函数参数相同的顺序返回。
欢呼任何建议。