scala - 提供代码块作为多个方法参数之一
问题描述
考虑这些重载 groupBy
签名:
def groupBy[K](f: T => K)(implicit kt: ClassTag[K]): RDD[(K, Iterable[T])] = withScope {
groupBy[K](f, defaultPartitioner(this))
}
def groupBy[K](
f: T => K,
numPartitions: Int)(implicit kt: ClassTag[K]): RDD[(K, Iterable[T])] = withScope {
groupBy(f, new HashPartitioner(numPartitions))
}
前者的正确/有效调用如下:
val groupedRdd = df.rdd.groupBy{ r => r.getString(r.fieldIndex("centroidId"))}
但我无法确定如何添加第二个参数。这是明显的尝试 - 它给出了语法错误:
val groupedRdd = df.rdd.groupBy{ r => r.getString(r.fieldIndex("centroidId")),
nPartitions}
我也试过(也有语法错误):
val groupedRdd = df.rdd.groupBy({ r => r.getString(r.fieldIndex("centroidId"))},
nPartitions)
顺便说一句,这是一种可行的方法..但我正在寻找内联语法
def func(r: Row) = r.getString(r.fieldIndex("centroidId"))
val groupedRdd = df.rdd.groupBy( func _, nPartitions)
解决方案
由于这是一个带有类型参数的泛型方法T
,K
Scala 有时无法从上下文中推断出它们应该是什么类型。在这种情况下,您可以通过提供如下类型注释来帮助它:
df.rdd.groupBy({ r: Row => r.getString(r.fieldIndex("centroidId")) }, nPartitions)
这也是这种方法有效的原因:
def func(r: Row) = r.getString(r.fieldIndex("centroidId"))
val groupedRdd = df.rdd.groupBy(func _, nPartitions)
这将类型固定为r
类似于Row
上述方法。
推荐阅读
- python - Python Keras Image Recognition 获得准确概率(不是 [[0.]] 或 [[1.]])
- python - pd.qcut 返回负值
- javascript - React Router - Uncaught SyntaxError: Unexpected token < 刷新带有参数的 URL 时
- django - 如何使用当前用户作为 QuerySet 属性中的方法参数
- themes - 在 BigCommerce/Stencil 中上传和引用自定义图像
- python - 如何在 Python 中跟踪局部变量的值?
- javascript - jquery DataTables 父行和子行作为一条记录而不是两条记录发布到服务器
- jmx - 按名称堆叠/重叠指标
- r - R使用dplyr创建或修改数据框
- vba - Autofit.rowheight 取决于该行的每个单元格中的文本(字符串)