Spark/Scala RDD join 总是给我空结果

Spark/Scala RDD join always gives me empty result

我一直在玩 Spark,我发现我的连接操作不起作用。以下是我的代码的一部分,并在 scala 控制台中得到结果:

scala> val conf = new SparkConf().setMaster("local[*]").setAppName("Part4")
scala> val sc = new SparkContext(conf)


scala> val k1 = sc.parallelize(List((1,3),(1,5),(2,4)))
k1: org.apache.spark.rdd.RDD[(Int, Int)] = ParallelCollectionRDD[24] at parallelize at <console>:29

scala> val k2 = sc.parallelize(List((1,'A'),(2,'B')))
k2: org.apache.spark.rdd.RDD[(Int, Char)] = ParallelCollectionRDD[25] at parallelize at <console>:29

scala> val k3 = k1.join(k2)
k3: org.apache.spark.rdd.RDD[(Int, (Int, Char))] = MapPartitionsRDD[28] at join at <console>:33

scala> k3.foreach(println)

scala> k3.collect
res33: Array[(Int, (Int, Char))] = Array()

所以我刚刚创建了一个玩具示例,其中包含两个带有 (k,v) 对的 rdd 列表 k1 和 k2 并尝试加入它们。但是,结果 k3 始终为空。我们可以看到 k1 和 k2 已正确指定,但 k3 仍然是空的。

怎么了?

--------更新我的问题: 我想我知道问题出在哪里,但我仍然很困惑:

一开始我写的

 val conf = new SparkConf().setMaster("local[*]").setAppName("Part4")
 val sc = new SparkContext(conf)

当我没有这两行代码时,我的连接有效,但当我添加它们时它就不起作用了。 为什么会这样?

spark-shell 启动它自己的 Spark 上下文。 Alas Spark 不喜欢在同一应用程序中使用多个上下文 运行。当我在 spark-shell 中执行第二行 (val sc = new SparkContext(conf)) 时,我得到

SNIP LOTS OF ERROR LINES
org.apache.spark.SparkException: Only one SparkContext may be running in this JVM (see SPARK-2243). To ignore this error, set spark.driver.allowMultipleContexts = true. The currently running SparkContext was created at:
org.apache.spark.SparkContext.<init>(SparkContext.scala:82)
SNIP LOTS OF ERROR LINES

Spark 有很多静态上下文和其他东西,这意味着当你有两个上下文时它就不起作用了。我会把这个归结为那个,但是可惜我无法证明这一点。