DataFrame 中的 Spark Scala 方法签名 API
Spark Scala Method Signature in DataFrame API
您好,我正在尝试更多地了解 Scala,但我觉得我对这个方法签名有点迷茫。
explode[A <: Product](input: Column*)(f: (Row) ⇒ TraversableOnce[A])(implicit arg0: scala.reflect.api.JavaUniverse.TypeTag[A]): DataFrame
首先,方括号中的“<:”是什么意思? A 和 B 应该是参数类型吗?但是 Column 是参数类型。
其次,看起来它执行了一个从 (Row) 到 Traversable[A] 的 lambda 函数,但我还没有看到至少一次在右侧参数上没有左侧参数的 lambda .
此外,我不是 100% 了解为什么它具有隐式 arg0: piece
提前致谢!
what is the "<:" supposed to mean in the square brackets?
<:
表示 scala 中的子类型,所以这里表示 A
是 Product
的子类型。它就像一种上限,将可以传递到此处的类型限制为 Product
的子类型
Are A and B supposed to be parameter types? But Column is the argument
type
A
不是参数类型,它本身就是一个参数,称为类型参数。这有点令人困惑,但基本上它意味着您可以将 product
的子类型的任何类型传递给此位置并在函数内使用类型参数。这使得函数更加通用,因为它可以同时处理不同的类型,而您不必为不同的类型编写单独的函数;
it looks like it does a lambda function from (Row) to Traversable[A]
f: (row) => Traversable[A]
是另一个参数,在本例中是接受 (row)
和 return Traversable[A]
的函数类型。根据这个定义,explode
可以接受一个函数作为参数,在这种情况下是一个 lambda 表达式;
为了说明最后一个案例:
def sum(x: Int, y: Int)(f: Int => Int) = f(x) + f(y)
sum: (x: Int, y: Int)(f: Int => Int)Int
sum(2,3)(x => 2*x)
res2: Int = 10
综上所述,函数explode一共有三个参数,第一个A
是类型参数。第二个和第三个是函数的实参,如您所见,Input
是 Column
类型,f
是函数类型 (row) => Traversable[A]
类型。
您好,我正在尝试更多地了解 Scala,但我觉得我对这个方法签名有点迷茫。
explode[A <: Product](input: Column*)(f: (Row) ⇒ TraversableOnce[A])(implicit arg0: scala.reflect.api.JavaUniverse.TypeTag[A]): DataFrame
首先,方括号中的“<:”是什么意思? A 和 B 应该是参数类型吗?但是 Column 是参数类型。
其次,看起来它执行了一个从 (Row) 到 Traversable[A] 的 lambda 函数,但我还没有看到至少一次在右侧参数上没有左侧参数的 lambda .
此外,我不是 100% 了解为什么它具有隐式 arg0: piece
提前致谢!
what is the "<:" supposed to mean in the square brackets?
<:
表示 scala 中的子类型,所以这里表示 A
是 Product
的子类型。它就像一种上限,将可以传递到此处的类型限制为 Product
Are A and B supposed to be parameter types? But Column is the argument type
A
不是参数类型,它本身就是一个参数,称为类型参数。这有点令人困惑,但基本上它意味着您可以将 product
的子类型的任何类型传递给此位置并在函数内使用类型参数。这使得函数更加通用,因为它可以同时处理不同的类型,而您不必为不同的类型编写单独的函数;
it looks like it does a lambda function from (Row) to Traversable[A]
f: (row) => Traversable[A]
是另一个参数,在本例中是接受 (row)
和 return Traversable[A]
的函数类型。根据这个定义,explode
可以接受一个函数作为参数,在这种情况下是一个 lambda 表达式;
为了说明最后一个案例:
def sum(x: Int, y: Int)(f: Int => Int) = f(x) + f(y)
sum: (x: Int, y: Int)(f: Int => Int)Int
sum(2,3)(x => 2*x)
res2: Int = 10
综上所述,函数explode一共有三个参数,第一个A
是类型参数。第二个和第三个是函数的实参,如您所见,Input
是 Column
类型,f
是函数类型 (row) => Traversable[A]
类型。