错误:值toList不是(Object,Object)的成员 - Spark Shell

时间:2016-08-25 08:29:16

标签: scala machine-learning apache-spark-mllib

  val cooccurrences = orders.map(order =>
  (
    order._1,
    order._2.productIterator.toList.combinations(2).map(order_pair =>
        (
            if (order_pair(0)._2 < order_pair(1)._2)
                (order_pair(0)._2, order_pair(1)._2)
            else
                (order_pair(1)._2, order_pair(0)._2),
            order_pair(0)._1 * order_pair(1)._1
        )
    )
  )
)

当我提交最后一个方法时,我收到以下错误:

 <console>:46: error: value _2 is not a member of Any
                   if (order_pair(0)._2 < order_pair(1)._2)
                                     ^
<console>:47: error: value _2 is not a member of Any
                       (order_pair(0)._2, order_pair(1)._2)
                                      ^
<console>:47: error: value _2 is not a member of Any
                       (order_pair(0)._2, order_pair(1)._2)
                                                        ^
<console>:49: error: value _2 is not a member of Any
                       (order_pair(1)._2, order_pair(0)._2),
                                      ^
<console>:49: error: value _2 is not a member of Any
                       (order_pair(1)._2, order_pair(0)._2),
                                                        ^
<console>:50: error: value _1 is not a member of Any
                   order_pair(0)._1 * order_pair(1)._1
                                 ^

任何人都知道我为什么会收到此错误?我需要在方法之前声明订单吗?

非常感谢!

3 个答案:

答案 0 :(得分:0)

您似乎正在尝试将toList应用于Object来电中的order._2.toListorder的类型为(Object, Object),因此order._2的类型为Object,但没有toList方法。 我假设您已将其应用于(Order, Order)个对象的序列。

一般来说,我建议为更多或更少复杂的类型显式注释类型注释。

答案 1 :(得分:0)

order._2是一个元组,toList方法不直接应用于元组。您可以使用order._2.productIterator.toList获取列表

答案 2 :(得分:0)

下面:

val orders = transactions.map { x => (
    x.get("id"),
    (x.get("cat"), x.get("quantity")))
}

您可以映射orders中产生的RDD的事务,其中每个元素的格式为(valueOfId, valueOfCat, valueofQuantity)。当你致电order._2.toList时,你在一个没有这种方法的对象valueOfCat上调用它(它不是一个集合)。