在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))
}
}
答案 0 :(得分:5)
整个(ResultSet) => T
部分是参数的类型。这意味着mapRow
参数是ResultSet
到T
的函数。
在您的示例中,它是一个默认值的参数,类似于
def foo(justAnInt : Int = 4) = ???
是参数列表中=
之后的部分。
所以,你得到parameterName : type = defaultVal
,你可能会注意到,它是直接的:
mapRow : (ResultSet) => T = ...
简单来说,参数是从ResultSet
到T
的函数,默认值为JdbcRDD.resultSetToObjectArray
方法转换为函数(因此尾随下划线)。