你的方法是可行的(参见[1])。尽管我使用了稍微不同的解决方案,但方法仍然相似:
可能性1
隐式
object ExtraDataFrameOperations {
object implicits {
implicit def dFWithExtraOperations(df: DataFrame) = DFWithExtraOperations(df)
}
}
case class DFWithExtraOperations(df: DataFrame) {
def customMethod(param: String) : DataFrame = {
df.select( df(param) )
}
}
使用方法
要在 DataFrame
上使用新的 customMethod
方法:
import ExtraDataFrameOperations.implicits._
val df = ...
val otherDF = df.customMethod("hello")
可能性2
除了使用上面提到的implicit method
,您还可以使用implicit class
:
隐式类
object ExtraDataFrameOperations {
implicit class DFWithExtraOperations(df : DataFrame) {
def customMethod(param: String) : DataFrame = {
df.select( df(param) )
}
}
}
使用方法
import ExtraDataFrameOperations._
val df = ...
val otherDF = df.customMethod("hello")
备注
如果您想要防止额外的import
,请将ExtraDataFrameOperations
对象转换为package object
并将其存储在您的包中名为package.scala
的文件中。
官方文档/参考资料
[1] M. Odersky的原始博客“Pimp my library”可在http://www.artima.com/weblogs/viewpost.jsp?thread=179766找到。