scala - 类型与 Spark-shell 中的相同类型不匹配

标签 scala apache-spark read-eval-print-loop type-mismatch

我已经围绕 spark-shell 构建了一个脚本工作流程,但我经常为发现的和所需的类型相同时发生的奇怪类型不匹配(可能继承自 scala repl)而烦恼。下面的例子说明了这个问题。以粘贴方式执行,没问题

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


import org.apache.spark.rdd.RDD
case class C(S:String)
def f(r:RDD[C]): String = "hello"
val in = sc.parallelize(List(C("hi")))
f(in)

// Exiting paste mode, now interpreting.

import org.apache.spark.rdd.RDD
defined class C
f: (r: org.apache.spark.rdd.RDD[C])String
in: org.apache.spark.rdd.RDD[C] = ParallelCollectionRDD[0] at parallelize at <console>:13
res0: String = hello

但是

scala> f(in)
<console>:29: error: type mismatch;
 found   : org.apache.spark.rdd.RDD[C]
 required: org.apache.spark.rdd.RDD[C]
              f(in)
                ^ 

有相关讨论about the scala replabout the spark-shell 但是提到的issue对我来说似乎无关(并且已解决)。

这个问题导致编写可通过的代码在 repl 中交互执行时出现严重问题,或者导致失去在 repl 中工作的大部分优势。有解决办法吗? (和/或这是一个已知问题?)

编辑:

spark 1.2 和 1.3.0 出现问题。使用 scala 2.10.4 在 spark 1.3.0 上进行测试

看来,至少在测试中,重复使用与案例类定义分开的类的语句,可以缓解问题

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


def f(r:RDD[C]): String = "hello"
val in = sc.parallelize(List(C("hi1")))

// Exiting paste mode, now interpreting.

f: (r: org.apache.spark.rdd.RDD[C])String
in: org.apache.spark.rdd.RDD[C] = ParallelCollectionRDD[1] at parallelize at <console>:26

scala> f(in)
res2: String = hello

最佳答案

不幸的是,这仍然是一个 open issue . spark-shell 中的代码包含在类中,它会导致 strange behavior有时。

另一个问题:value reduceByKey is not member of org.apache.spark.rdd.RDD[(...,...)] 可能是使用不同的版本引起的同一项目中的 Spark 。如果您使用 IntelliJ,请转到 File -> Project Structure -> Libraries 并删除诸如“SBT: org.apache.spark:spark-catalyst_2.10:1.1. 0: jar ”。您需要带有 1.2.0 或 1.3.0 版 spark 的库。

希望对你有所帮助。

关于scala - 类型与 Spark-shell 中的相同类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29768717/

相关文章:

scala - 可以不使用 ID 字段而使用另一个列名吗?在电梯里

windows - winutils.exe chmod 命令未设置权限

scala - 有没有更好的方法对 RDD[Array[Double]] 进行归约操作

xcode - REPL 中的 `Error creating target Swift AST context: (null)`

java.awt.HeadlessException 从 Kotlin REPL 启动 JavaFX 应用程序

scala - 如何扁平化嵌套元组?

scala - <> 运算符在 Slick 中起什么作用?

scala - 要求用户在 Scala 的方法中提供 [Type]?

apache-spark - PySpark groupBy 中的中位数/分位数

python - 为什么 python 解释器提示 ... 注释 "#"?