标签: scopt

使用scopt OptionParser和Spark时的NoClassDefFoundError

我使用Apache Spark版本1.2.1和Scala版本2.10.4.我想让示例MovieLensALS正常工作.但是,我遇到了scopt库的错误,这是代码中的一个要求.任何帮助,将不胜感激.我的build.sbt如下:

name := "Movie Recommender System"

version := "1.0"

scalaVersion := "2.10.4"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.2.1"

libraryDependencies += "org.apache.spark" %% "spark-graphx" % "1.2.1"

libraryDependencies += "org.apache.spark"  % "spark-mllib_2.10" % "1.2.1"

libraryDependencies += "com.github.scopt" %% "scopt" % "3.2.0"

resolvers += Resolver.sonatypeRepo("public")
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

   Exception in thread "main" java.lang.NoClassDefFoundError: scopt/OptionParser
    at MovieLensALS.main(MovieLensALS.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:358)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

    Caused by: java.lang.ClassNotFoundException: scopt.OptionParser
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native …
Run Code Online (Sandbox Code Playgroud)

scala noclassdeffounderror apache-spark scopt

5
推荐指数
1
解决办法
3521
查看次数

在 Scala 中扩展 Scopt OptionParser

我试图拥有一个带有一些默认参数的基本选项解析器。

在其他项目中,我想使用其他参数扩展选项解析器。

就像是:

case class Config(foo: String = null)

trait DefaultParser { self: OptionParser[Config] =>
  opt[String]('f', "foo") action { (x, c) =>
    c.copy(foo = x)
  }
}

case class MyConfig(bar: String = "hello world")

trait MyParser { self: OptionParser[MyConfig] =>
  opt[String]('b', "bar") action { (x, c) =>
    c.copy(bar = x)
  }
}
Run Code Online (Sandbox Code Playgroud)

我是新手Scala,我不确定现在如何在同一个args.

我正在使用Scala2.10 和scopt_2.10v3.3.0。

inheritance scala optionparser scopt

5
推荐指数
1
解决办法
3194
查看次数

使用scopt解析Scala选项

使用scopt https://github.com/scopt/scopt

我有一个非常简单的Scala CLI驱动程序,它在.parse的第一行出错.该行是var i = 0,无法想象为什么会失败,也许在我如何实例化OptionParser?

def parse(args: Seq[String], init: C): Option[C] = {
  var i = 0 <———————————————— prints the error below
  val pendingOptions = ListBuffer() ++ (nonArgs filterNot {_.hasParent})

Exception in thread "main" java.lang.NoSuchMethodError: scala.runtime.IntRef.create(I)Lscala/runtime/IntRef;
at scopt.OptionParser.parse(options.scala:306)
at org.apache.mahout.drivers.ItemSimilarityDriver$.main(ItemSimilarityDriver.scala:47)
at org.apache.mahout.drivers.ItemSimilarityDriver.main(ItemSimilarityDriver.scala)
Run Code Online (Sandbox Code Playgroud)

这里有完整的代码,很抱歉,但我是Scala的新手,所以这可能是一个非常愚蠢的问题

object ItemSimilarityDriver {
  /**
   * @param args  Command line args, if empty a help message is printed.
   * @return
   */

def main(args: Array[String]): Unit = {

    val parser = new OptionParser[Config]("ItemSimilarity") {
      head("ItemSimilarity", "Spark")
      opt[Unit]('r', …
Run Code Online (Sandbox Code Playgroud)

scala scopt

4
推荐指数
1
解决办法
8434
查看次数

案例类继承了另一个类/特征

我想让一个案例类扩展一个特征

这是我的要求:

  1. 我需要为孩子使用一个案例类。由于scopt(https://github.com/scopt/scopt),因此这是一项艰巨的要求
  2. 父母必须是一个特质。抱歉,您之前不清楚
  3. 我希望孩子可以访问父特性的属性,并且最好在声明子案例类时不必再次指定它们。例如,如果父项特征是:trait ParentParams { var name: String = "Al" }则子项不应为case class ChildParams(id: String = "whatever", override val name: String = Parent.defaultName) extends Parent。我宁愿将其作为case class Child(id: String) extends Parent。但是,当我尝试第二种方法时,当我尝试对.copy()case类对象进行操作时,我无法访问名称字段。作为一种解决方法,我可以通过以下方式更改name属性的值childObj.name = "newName"
  4. 我(硬性要求)应该能够覆盖子对象从父对象继承的属性值。现在这是可能的,因为我已将父属性声明为var而不是val。但是,理想情况下,我希望使其不可变,并使用copy方法更改值。

这就是我现在拥有的,但是无法使用该.copy()方法来更改继承属性的值。

package abcd.wxyz

import org.scalatest.{FlatSpec, Matchers}

trait ParentTrait {
  var name: String = "name"
}

case class TestParams(param1: String = "123") extends ParentTrait

class TestParamsSpec extends FlatSpec with Matchers …
Run Code Online (Sandbox Code Playgroud)

inheritance scala case-class scopt

2
推荐指数
1
解决办法
74
查看次数

如何禁用Scopt的"未知选项"异常?

我有一个基本的Config案例类,它被用作几个不同脚本的Configs的通用部分.我希望能够为解析此基本配置的OptionParsers停止复制粘贴代码(例如,每个脚本都需要--cluster,--port因此我希望单个基础OptionParser始终处理这个问题),并让最小的自定义OptionParser处理每个脚本独有的选项(例如--asdf).

问题是,如果我要求基本解析器解析包含的参数--asdf,Scopt抱怨:

[error] Error: Unknown option --asdf
[error] Usage: Config [options]
[error]
[error]   -c <value> | --cluster <value>
[error]         Cluster the machine is part of
[error]   -p <value> | --port <value>
[error]         Port to listen on
...
[error] Exception in thread "main" java.util.NoSuchElementException: None.get
Run Code Online (Sandbox Code Playgroud)

有没有办法让它忽略未知的参数?

scala command-line-arguments scopt

1
推荐指数
1
解决办法
1002
查看次数