使用在兩個檔案中都有唯一列的 spark scala 加入或合并兩個 csv 檔案
Input dataframes
csv1 emp_name designation salary_col
csv2 emp_name designation advance_salary_col
Output dataframe
final_csv emp_name designation salary_col advance_salary_col
csv1
emp_name designation salary_col
smith manager 40000
john analyst 35000
adam sr.engineer 50000
eve QA 36000
mills sr.manager 44000
csv2
emp_name designation advance_salary_col
smith manager 2000
john analyst 3030
adam sr.engineer 5044
eve QA 3600
mills sr.manager 4500
final_csv
emp_name designation salary_col advance_salary_col
smith manager 40000 2000
john analyst 35000 3030
adam sr.engineer 50000 5044
eve QA 36000 3600
mills sr.manager 44000 4500
我嘗試使用幾種方法 Union,Intersect,UnionByName 但使用 scala 為任何列獲取空值
val emp_dataDf1 = spark.read.format("csv")
.option("header", "true")
.load("data/emp_data1.csv")
val emp_dataDf2 = spark.read.format("csv")
.option("header", "true")
.load("/data/emp_data2.csv")
val final_df= emp_dataDf1.union(emp_dataDf2)
uj5u.com熱心網友回復:
這是一個連接。請參閱有關Spark 中的SQL 連接和連接的檔案。
val final_df = emp_dataDf1.join(emp_dataDf2, Seq("empname", "designation"))
uj5u.com熱心網友回復:
注意:您需要提及 csv 檔案的分隔符,如果您使用空格(或任何分隔符),請確保使用準確的字串文字。
這是你可以做到的:
val csv1 = spark
.read
.option("header","true")
.option("sep", " ")
.csv("your_csv1_file")
val csv2 = spark
.read
.option("header","true")
.option("sep", " ")
.csv("your_csv2_file")
val joinExpression = Seq("emp_name", "designation")
csv1.join(csv2, joinExpression, "inner").show(false)
/* output *
*
-------- ----------- ---------- ------------------
|emp_name|designation|salary_col|advance_salary_col|
-------- ----------- ---------- ------------------
|smith |manager |40000 |2000 |
|john |analyst |35000 |3030 |
|adam |sr.engineer|50000 |5044 |
|eve |QA |36000 |3600 |
|mills |sr.manager |44000 |4500 |
-------- ----------- ---------- ------------------
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424394.html
