在火花中有效地使用联合
Posted
技术标签:
【中文标题】在火花中有效地使用联合【英文标题】:efficiently using union in spark 【发布时间】:2017-04-22 02:33:22 【问题描述】:我是 scala 和 spark 的新手,现在我有两个 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个任务。
有没有更有效的方法来做到这一点?
【问题讨论】:
【参考方案1】:为什么不将这两个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
【讨论】:
以上是关于在火花中有效地使用联合的主要内容,如果未能解决你的问题,请参考以下文章