加入多个数据框火花

Posted

技术标签:

【中文标题】加入多个数据框火花【英文标题】:Join multiples dataframes spark 【发布时间】:2017-03-11 12:18:54 【问题描述】:

我有多个从 csv 文件加载的数据框,我想根据列加入它们,这里我做了什么。我只是想通用化并使其自动化。

val spark = SparkSession.builder.master("local").appName("my-spark-app").getOrCreate()
   import spark.sqlContext.implicits._
  val df1 = spark.read.option("inferSchema", "true").option("header", "true").csv("C:/Users/mhattabi/Desktop/dataTestCsvFile/dataTest1.txt")
  val df2 = spark.read.option("inferSchema", "true").option("header", "true").csv("C:/Users/mhattabi/Desktop/dataTestCsvFile/dataTest2.txt")
 val df3 = spark.read.option("inferSchema", "true").option("header", "true").csv("C:/Users/mhattabi/Desktop/dataTestCsvFile/dataTest3.txt")
  df1.show
  df2.show
  df3.show
val df =List(df1,df2,df3).reduce((a, b) => a.join(b,Seq("time"),joinType="outer"))
   df.show

问题只需要其中两个而不是全部。结果是加入其中两个 谢谢

【问题讨论】:

【参考方案1】:

这是答案的解决方案

val df1 = spark.read.option("inferSchema", "true").option("header", "true").csv("C:/Users/mhattabi/Desktop/dataTestCsvFile/dataTest1.txt")
      val df2 = spark.read.option("inferSchema", "true").option("header", "true").csv("C:/Users/mhattabi/Desktop/dataTestCsvFile/dataTest2.txt")
     val df3 = spark.read.option("inferSchema", "true").option("header", "true").csv("C:/Users/mhattabi/Desktop/dataTestCsvFile/dataTest3.txt")
     val df_result=recursiveJoinOnDate(List(df1,df2,df3))
    df_result.show
      
def recursiveJoinOnDate(list: List[DataFrame]): DataFrame = 
  if (list.isEmpty) null else if(list.size >1) list.head.join(recursiveJoinOnDate(list.tail),Seq("`time.1`"),joinType="outer") else list.head 
  

【讨论】:

以上是关于加入多个数据框火花的主要内容,如果未能解决你的问题,请参考以下文章

在火花中加入 2 个数据帧后选择特定列

执行多个火花查询并存储为数据框

如何替换火花数据框所有列中的多个字符?

将多个火花数据框列转换为具有列表类型的单列

嵌套的json扁平化火花数据框

火花可重复/确定性结果