【问题标题】:Joining multiple dataframes horizontally水平连接多个数据框
【发布时间】:2019-10-14 15:15:31
【问题描述】:

我有以下数据框

val count :Dataframe = spark.sql("select 1,$database_name,$table_name count(*) from $table_name ")

输出:

1,库存,T076p,4332

val dist_count :Dataframe = spark.sql("1,select distinct count(*) from $table_name")`

输出:

4112 或 4332(可以相同)

val truecount : Dataframe = spark.sql("select 1,count(*) from $table_name where flag =true")`

输出:

4330

   val Falsecount : DataFrame = spark.sql("select 1,count(*) from $table_name where flag =false")

输出:

4332

问题:我如何加入上面的dataframe 以获得结果dataframe 给我输出。
如下。

库存,T076p, 4332,4332,4330

这里的逗号用于列分隔符

P.S - 我已经为每个 dataframe 添加了 1,所以我可以使用 join dataframes(所以这里不是强制性的)。

【问题讨论】:

  • 您好,您在下面尝试过吗?如果您有任何问题随时问。如果你对答案没问题。请注意投票并以所有者的身份接受答案。谢谢!

标签: scala apache-spark hadoop apache-spark-sql


【解决方案1】:

问题
如何加入上面的数据框以获取结果数据框 如下给我o/p。

stock ,T076p, 4332,4332,4330 - 这里的逗号用于列分隔符

看看这个例子。我已经用下面的虚拟数据框模仿了你的要求。


package com.examples

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession

object MultiDFJoin {
  def main(args: Array[String]) {
    import org.apache.spark.sql.functions._
    Logger.getLogger("org").setLevel(Level.OFF)

    val spark = SparkSession.builder.
      master("local")
      .appName(this.getClass.getName)
      .getOrCreate()
    import spark.implicits._
    val columns = Array("column1", "column2", "column3", "column4")
    val df1 = (Seq(
      (1, "stock", "T076p", 4332))
      ).toDF(columns: _*).as("first")
    df1.show()
    val df2 = Seq((1, 4332)).toDF(columns.slice(0, 2): _*).as("second")
    df2.show()
    val df3 = Seq((1, 4330)).toDF(columns.slice(0, 2): _*).as("third")
    df3.show()
    val df4 = Seq((1, 4332)).toDF(columns.slice(0, 2): _*).as("four")
    df4.show()
    val finalcsv = df1.join(df2, col("first.column1") === col("second.column1")).selectExpr("first.*", "second.column2")
      .join(df3, Seq("column1")).selectExpr("first.*", "third.column2")
      .join(df4, Seq("column1"))
      .selectExpr("first.*", "third.column2", "four.column2")
      .drop("column1").collect.mkString(",") // this column used for just joining hence dropping
    print(finalcsv)
  }
}

结果:

+-------+-------+-------+--------+ |column1|column2|column3|column4| +-------+-------+-------+--------+ | 1|现货| T076p| 4332| +-------+-------+-------+--------+ +-------+-------+ |栏1|栏2| +-------+-------+ | 1| 4332| +-------+-------+ +-------+-------+ |栏1|栏2| +-------+-------+ | 1| 4330| +-------+-------+ +-------+-------+ |栏1|栏2| +-------+-------+ | 1| 4332| +-------+-------+ [股票,T076p,4332,4330,4332]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多