2017-04-22 60 views
0

私はscalaとsparkには新しく、Aは[(1,2)、(2,3) 6)]、[(1,2)、(2,3)、(4,5)、(5,6)]のようにRDDを取得したい。しかし、事は私のデータが大きいです、AとBの両方が10GBだとします。私はsc.union(A、B)を使用しますが、それは遅いです。私はスパークUIでこの段階で28308のタスクがあることがわかりました。sparkでunionを効率的に使用しています

これを行うより効率的な方法はありますか?

答えて

0

なぜRDDsdataframesに変換し、union機能を使用してください。
dataframeに変換するのは簡単です。import sqlContext.implicits._を入力し、.toDF()の機能をheader namesに適用するだけです。例えば

val sparkSession = SparkSession.builder().appName("testings").master("local").config("", "").getOrCreate() 

    val sqlContext = sparkSession.sqlContext 

    var firstTableColumns = Seq("col1", "col2") 
    var secondTableColumns = Seq("col3", "col4") 

    import sqlContext.implicits._ 

    var firstDF = Seq((1, 2), (2, 3), (3, 4), (2, 3), (3, 4)).toDF(firstTableColumns:_*) 

    var secondDF = Seq((4, 5), (5, 6), (6, 7), (4, 5)) .toDF(secondTableColumns: _*) 

    firstDF = firstDF.union(secondDF) 

あなたがRDDsよりもdataframesで動作することは非常に簡単なはずです。 dataframeRDDに変更することも非常に簡単です。.rdd関数を呼び出すだけです。

val rddData = firstDF.rdd 
関連する問題