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

Posted

技术标签:

【中文标题】在火花中加入 2 个数据帧后选择特定列【英文标题】:select specific columns after joining 2 dataframes in spark 【发布时间】:2018-09-24 00:33:13 【问题描述】:

我已加入 2 个数据框,现在尝试获取包含两个数据框列的报告。 我尝试使用 .select (cols = String* ) 但它不起作用。

here 描述的方法似乎也没有解决我的问题。

下面是代码。 val full_report 是我需要获取列的地方。

import org.apache.spark.sql.types._

object read_data 


  def main (args:Array[String]) 

    val spark = org.apache.spark.sql.SparkSession.builder
      .master("local")
      .appName("Spark CSV Reader")
      .getOrCreate;


    val customSchema = StructType(Array(
      StructField("order_id", IntegerType, true),
      StructField("parent_order_uuid", StringType, true),
      StructField("company", StringType, true),
      StructField("country_id", IntegerType, true)))

    val readogp = spark.read.format("csv")
      .option("header", "false")
      .schema(customSchema)
      .load("/home/cloudera/Desktop/ogp_csv.csv")

    readogp.show()

    val read_country = spark.read.format("csv")
      .option("header", "true")
      .load("/home/cloudera/Desktop/country.csv")

    read_country.show()

    println("************************************************************************")

   val full_report  = readogp.join(read_country, readogp.col("country_id") === read_country.col("country_id"))
       .select(readogp.select("order_id" + "parent_order_id"))  

    full.show()

  


请告诉我如何克服这个障碍。

【问题讨论】:

【参考方案1】:

加入数据框后,您可以使用以下语法获取特定列。

根据您的示例:

val full_report_df  = readogp.join(read_country, readogp.col("country_id") == read_country.col("country_id"))

val full_report = full_report_df.select("order_id","parent_order_id")  

// Below will show 10 records for 2 columns order_id, parent_order_id.

full_report.show(10,false)  

【讨论】:

以上是关于在火花中加入 2 个数据帧后选择特定列的主要内容,如果未能解决你的问题,请参考以下文章

散列火花数据框的多列

加入多个数据框火花

读入火花数据框时如何从csv文件中删除列

如何在火花中处理这个

合并,合并火花数据框中的 2 列

在火花中加入大小不等的数据集