簡體   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