繁体   English   中英

Spark / Scala RDD连接总是给我空结果

[英]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有很多静态上下文,其他东西意味着当您有两个上下文时,它将无法工作。 我可以将其归纳为无论如何,我无法证明这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM