在spark JdbcRDD scala中,它具有以下代码.它有一个像参数
mapRow: (ResultSet) => T = JdbcRDD.resultSetToObjectArray _
那个参数中"T ="的含义是什么?为什么不呢
mapRow: (ResultSet) => JdbcRDD.resultSetToObjectArray _
代码是:
class JdbcRDD[T: ClassTag]( sc: SparkContext, getConnection: () => Connection, sql: String, lowerBound: Long, upperBound: Long, numPartitions: Int, mapRow: (ResultSet) => T = JdbcRDD.resultSetToObjectArray _) object JdbcRDD { def resultSetToObjectArray(rs: ResultSet) = { Array.tabulate[Object](rs.getMetaData.getColumnCount)(i => rs.getObject(i + 1)) } }
Patryk Ćwiek.. 5
整个(ResultSet) => T
部分是参数的类型.这意味着,mapRow
参数是从一个函数ResultSet
成T
.
在您的示例中,它是一个具有默认值的参数,类似于
def foo(justAnInt : Int = 4) = ???
这是=
参数列表中的后续部分.
所以,parameterName : type = defaultVal
正如您可能注意到的,它是直接的:
mapRow : (ResultSet) => T = ...
在普通的话,该参数是从一个函数ResultSet
为T
与默认值JdbcRDD.resultSetToObjectArray
转换成函数方法(因此结尾下划线).