小编mar*_*ios的帖子

将Scala代码部署到Spark时的ClassNotFoundException anonfun

我是Apache Spark的新手,我正在尝试将一段简单的scala代码部署到Spark.

注意:我正在尝试连接到我通过我的java参数配置的现有正在运行的集群:spark.master=spark://MyHostName:7077

环境

  • 使用scala 2.10构建Spark 1.5.1
  • Spark 在我的本地计算机上运行独立模式
  • 操作系统:Mac OS El Captain
  • JVM:JDK 1.8.0_60
  • IDE:IntelliJ IDEA社区14.1.5
  • Scala版本:2.10.4

sbt:0.13.8

import org.apache.spark.{SparkConf, SparkContext}
object HelloSpark {
  def main(args: Array[String]) {
    val logFile = "/README.md"
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    println("%s done!".format(numAs))
  }
}
Run Code Online (Sandbox Code Playgroud)

build.sbt

name := "data-streamer210"

version := "1.0"

scalaVersion := "2.10.4" …
Run Code Online (Sandbox Code Playgroud)

scala intellij-idea sbt classnotfoundexception apache-spark

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

使用Mockito模拟Scala void函数

我找到了一些答案,但没有什么对我有用.

试图模拟返回void的Apache Shiro Subject接口登录方法.

接口:

    void login(AuthenticationToken token) throws AuthenticationException;
Run Code Online (Sandbox Code Playgroud)

我试过了 :

   #1
  val subject = mock[Subject]
  doNothing().when(subject).login(new UsernamePasswordToken())

   #2
  val subject = mock[Subject]
  doNothing().when(subject).login(any[UsernamePasswordToken])

   #3
  when(subject.login(any[UsernamePasswordToken])).thenAnswer(new Answer[Void]() {
      override def answer(invocation: InvocationOnMock): Void = {
       null:Void
      }
Run Code Online (Sandbox Code Playgroud)

我在登录时不断收到NullPointerException.我的目标是测试登录方法并测试一些成功案例以及此方法抛出异常的一些失败案例.

scala mockito spec2

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

案例类默认应用方法

假设我们有以下案例类:

case class CasePerson(firstName: String)
Run Code Online (Sandbox Code Playgroud)

我们还为它定义了一个伴侣对象:

object CasePerson {
 def apply() = new CasePerson( "XYZ" )
}
Run Code Online (Sandbox Code Playgroud)

请注意,在上面的示例中,我使用apply方法显式定义了伴随对象,而没有定义默认的apply方法:

// This "default" apply has the same argument as the primary constructor of the case class
def apply(firstName : String) = new CasePerson(firstName)
Run Code Online (Sandbox Code Playgroud)

问:那么Scala在哪里获得"默认"适用?我在这里明确定义了伴随对象,没有默认的apply,编译器仍然知道如何执行:

val casePerson = CasePerson("PQR")
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?

scala case-class

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

用于Apache Spark RDD的Scalaz类型类

目标是实现Scalaz为Spark的RDD(分布式集合)提供的不同类型类(如Semigroup,Monad,Functor等).不幸的是,我不能使任何采用更高级别类型(如Monad,Functor等)的类型类与RDD一起使用.

RDD被定义(简化)为:

abstract class RDD[T: ClassTag](){
   def map[U: ClassTag](f: T => U): RDD[U] = {...}
}
Run Code Online (Sandbox Code Playgroud)

可以在此处找到完整的RDD代码.

这是一个很好的例子:

import scalaz._, Scalaz._
import org.apache.spark.rdd.RDD

implicit def semigroupRDD[A] = new Semigroup[RDD[A]] {
   def append(x:RDD[A], y: => RDD[A]) = x.union(y)
}
Run Code Online (Sandbox Code Playgroud)

这是一个不起作用的例子:

implicit def functorRDD =  new Functor[RDD] {
   override def map[A, B](fa: RDD[A])(f: A => B): RDD[B] = {
      fa.map(f)
   }
}
Run Code Online (Sandbox Code Playgroud)

这失败了:

错误:没有ClassTag可用于B fa.map(f)

错误很清楚.在RDD中实现的地图需要ClassTag(见上文).ScalaZ仿函数/ monad等没有ClassTag.甚至可以在不修改Scalaz和/或Spark的情况下完成这项工作吗?

functional-programming scala scalaz apache-spark rdd

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

在Scala中组合两个Option [List [String]]

我有两个选项

val opt1 = Some(List("Sal", "Salil"))
val opt2 = Some(List("Sal2", "Salil2"))
Run Code Online (Sandbox Code Playgroud)

opt1或opt2可以是None.如果任何一个是None,那么我想要一个包含在另一个中的List的选项.如果两者都是None,则应返回None.

如果两者都是Some,那么有些列表包含来自两个列表的元素,如下所示:

Some(List(Sal, Salil, Sal2, Salil2))
Run Code Online (Sandbox Code Playgroud)

我知道我可以手工做到这一点,但有一种优雅的方式来做到这一点吗?如果其中一个选项为"无",则"推理"不起作用.

scala

6
推荐指数
2
解决办法
1324
查看次数

来自多个配置文件的Spark负载设置

Spark从中读取默认配置$SPARK_HOME/conf/spark-defaults.conf

--properties-file [FILE]使用(say)时,还可以使用命令行参数来更改默认位置spark-submit

我想做的是从文件中加载其他参数,而不必替换默认参数。也就是说,我希望spark spark-defaults.conf从另一个文件加载属性并从另一个文件加载更多属性。现在,如果两者都定义了属性,则我希望最后一个配置文件获胜。

Spark默认支持此功能吗?

apache-spark

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

增加sbt-assembly中的内存

有没有办法在组装过程中增加内存(插件)?我注意到通过SBT_OPTS向sbt添加更多内存并没有多大帮助.我怀疑程序集正在分支一个单独的JVM,它不会从sbt继承JVM配置.

这是错误:

java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:Java堆空间

这是我没有太多运气的尝试:

javaOptions in assembly += "-Xmx2g"

scala sbt sbt-assembly

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

SBT插件:是否可以为单个测试运行脚本而不是运行所有测试?

我有5个脚本测试来测试我的sbt插件.所有这些都需要很长时间才能运行.我有时想只运行其中一个测试.

是否可以指定脚本运行哪个测试?

sbt sbt-plugin

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

Spark:无法将RDD元素添加到闭包内的可变HashMap中

我有以下代码,其中rddMaporg.apache.spark.rdd.RDD[(String, (String, String))],myHashMapscala.collection.mutable.HashMap.

我做.saveAsTextFile("temp_out")了强制评估rddMap.map.

然而,即使println(" t " + t)是打印东西,后来myHashMap仍然只有一个我手动放在一开始的元素("test1", ("10", "20")).其中的一切都rddMap没有投入myHashMap.

代码段:

val myHashMap = new HashMap[String, (String, String)]
myHashMap.put("test1", ("10", "20"))
rddMap.map { t =>
  println(" t " + t)
  myHashMap.put(t._1, t._2)
}.saveAsTextFile("temp_out")

println(rddMap.count)
println(myHashMap.toString)
Run Code Online (Sandbox Code Playgroud)

为什么我不能把rddMap中的元素放到我的myHashMap

scala hashmap apache-spark rdd

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

使用"."无法正确分割文本.分隔符

在Scala中,我有一个由一组句子组成的文本.我试图将这个文本拆分成这样的单个句子:

val sentences: Array[String] = text.split(".")
Run Code Online (Sandbox Code Playgroud)

但是,当我检查sentences数组时(如下面的行中所示),我发现数组是空的:

println("Sentences are: " + sentences.mkString(" "))
Run Code Online (Sandbox Code Playgroud)

为什么分裂没有正确完成?

对于文字:

A sword is a bladed weapon intended for both cutting and thrusting. The precise definition of the term varies with the historical epoch or the geographical region under consideration. A sword in the most narrow sense consists of a straight blade with two edges.
Run Code Online (Sandbox Code Playgroud)

输出是:

Sentences are: 
Run Code Online (Sandbox Code Playgroud)

scala

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

将列表转换为案例类

作为一个练习,我试图看看我是否可以List[Any]使用无形的方法将其"投射"到案例类中.

我想要实现的一个非常基本的例子:

case class Foo(i: Int, j: String)
val foo: Option[Foo] = fromListToCaseClass[Foo]( List(1:Any, "hi":Any) ) 
Run Code Online (Sandbox Code Playgroud)

以下是我如何塑造我的解决方案(这可能非常不合适):

def fromListToCaseClass[CC <: Product](a: List[Any]): Option[CC] = a.toHList[???].map( x => Generic[CC].from(x) )
Run Code Online (Sandbox Code Playgroud)

这是我的推理:

我知道你可以从case类转到HList [T](CC - > HList [T]); 其中T是HList的类型.我也知道你可以从列表中创建一个HList(list - > Option [HList]),只要你知道HList的类型.最后我知道你可以从HList转到案例类(HList - > CC).

CC -> HList[T]
list -> Option[HList[T]] -> Option[CC]
Run Code Online (Sandbox Code Playgroud)

我想知道这是否有意义,或者我是否离开这里.我们能做到这一点吗?还有其他建议吗?谢谢!

scala shapeless

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

Scala Range构造函数API

在Scala中,我们可以通过以下方式创建Range对象:

var range = 1 to 10
Run Code Online (Sandbox Code Playgroud)

或者改为使用构造函数

var range = new Range(1,10,1)
Run Code Online (Sandbox Code Playgroud)

但是,如果我们查看Scala API for Range,我们只能看到一个定义了3个参数的构造函数.所以我的问题是:我们在哪里可以找到像第一个那样的构造函数的API?我希望在API页面上找到这些信息.

scala

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

如果Scala函数中没有返回任何内容该怎么办

我有一个Scala函数,其显式返回类型为RDD:

def myfunction(x:Int):RDD = {
  if (x==1) { 
    formRDD()
  } else {

  }
}
Run Code Online (Sandbox Code Playgroud)

如果我不想形成一个空的RDD,我不知道如何处理其他问题.

scala return-type apache-spark

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