2017-04-22 68 views
0

我是新來的斯卡拉和火花,現在我有兩個RDD像A是[(1,2),(2,3)]和B是[(4,5),(5, 6)],我想得到像[(1,2),(2,3),(4,5),(5,6)]的RDD。但事情是我的數據很大,假設A和B都是10GB。我使用sc.union(A,B),但速度很慢。我在Spark UI中看到在這個階段有28308個任務。高效地使用火花聯盟

有沒有更有效的方法來做到這一點?

回答

0

爲什麼不將兩個RDDs轉換爲dataframes並使用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) 

它應該是很容易讓你與dataframes工作比RDDs。將dataframe更改爲RDD也相當容易,只需撥打.rdd功能

val rddData = firstDF.rdd