2016-09-16 44 views
3

在星火1.6.2(斯卡拉2.10.5)下面的代码在壳工作只是罚款:星火2.0 Scala的import语句

import org.apache.spark.mllib.linalg.Vector 
case class DataPoint(vid: String, label: Double, features: Vector) 

的mllib矢量正确盖过了Scala的载体。

然而,星火2.0(斯卡拉2.11.8)相同的代码抛出在shell以下错误:

<console>:11: error: type Vector takes type parameters 
    case class DataPoint(vid: String, label: Double, features: Vector) 

为了使其工作,我现在必须明确命名类:

case class DataPoint(vid: String, label: Double, 
    features: org.apache.spark.mllib.linalg.Vector) 

有人可以告诉我什么改变了,是Spark还是Scala有过错?谢谢!

+2

他们改变了火花壳做进口,有它突出的错误。你在谈论从shell运行吗? –

+0

@ som-snytt是我从shell运行 - 谢谢 - 更新了问题。好吧,那么它最有可能是一个错误。 – Roman

回答

3

最简单的办法就是对这个问题是一个简单的paste

Welcome to 
     ____    __ 
    /__/__ ___ _____/ /__ 
    _\ \/ _ \/ _ `/ __/ '_/ 
    /___/ .__/\_,_/_/ /_/\_\ version 2.1.0-SNAPSHOT 
     /_/ 

Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_102) 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> import org.apache.spark.mllib.linalg.Vector 
import org.apache.spark.mllib.linalg.Vector 

scala> case class DataPoint(vid: String, label: Double, features: Vector) 
<console>:11: error: type Vector takes type parameters 
     case class DataPoint(vid: String, label: Double, features: Vector) 
                   ^

scala> :paste 
// Entering paste mode (ctrl-D to finish) 

import org.apache.spark.mllib.linalg.Vector 
case class DataPoint(vid: String, label: Double, features: Vector) 

// Exiting paste mode, now interpreting. 

import org.apache.spark.mllib.linalg.Vector 
defined class DataPoint 
+0

谢谢@ zero323 - 你的解决方案确实有效!你能不能详细说明是什么使它工作? – Roman

+1

与逐行工作相比,差异在于整个模块一起编译。通过将所有内容放在同一个块中,例如'{import ....; case class DataPoint(...)}'(我知道,没用)或者包装一个对象。但如果你问如何解决这个上游,我不知道。外壳严重闪烁,并且存在许多丑陋的bug,包括[case class monster](http://stackoverflow.com/q/35301998/1560062)。 – zero323

+0

非常感谢你! – Roman