2017-02-26 133 views
2

我有兩個csv文件(數據集)file1和file2。加入兩個數據集spark scala

文件1包括以下欄:

Orders | Requests | Book1 | Book2 
Varchar| Integer | Integer| Integer 

文件2包括以下欄:

Book3 | Book4 | Book5 | Orders 
String| String| Varchar| Varchar 

如何在兩個CSV文件中的數據結合起來,斯卡拉檢查:

  • 有多少個
    • 訂單,第一冊(忽略具有值= 0第一冊),BOOK3和Book4存在於每個訂單兩個文件
    • 注意:列訂單是常見的兩個文件
+0

'orders'代表什麼?這兩個文件之間的邏輯關係是什麼?這個連接的目的是什麼? – Yaron

+0

對不起,我感到困惑。我只是隨機列名。我想合併兩個具有公共列(假設爲column1)的csv文件,並從兩個文件(假設第一個文件的第二個列和第二個文件的第6列中的第6列)顯示包含公共列的列。所以,輸出將會是column1,column2,column5,column6。另外,忽略column2的值爲0. – SolakiR

回答

0

可以連接兩個csv通過創建Pair RDD。

val rightFile = job.patch.get.file 
    val rightFileByKeys = sc.textFile(rightFile).map { line => 
    new LineParser(line, job.patch.get.patchKeyIndex, job.delimRegex, Some(job.patch.get.patchValueIndex)) 
    }.keyBy(_.getKey()) 

    val leftFileByKeys = sc.textFile(leftFile).map { line => 
    new LineParser(line, job.patch.get.fileKeyIndex, job.delimRegex) 
    }.keyBy(_.getKey()) 

    leftFileByKeys.join(rightFileByKeys).map { case (key, (left, right)) => 
    (job, left.line + job.delim + right.getValue()) 
    } 
+0

例如:我想結合兩個具有公共列(假設爲column1)的csv文件(file1和file2),並從兩個文件中顯示包括公共column1的列(假設第一個文件和第五個列中的第二個列,來自第二文件的列6)。所以,輸出將會是column1,column2,column5,column6。另外,忽略column2的值= 0.如何爲此編寫scala代碼? – SolakiR

+0

正如我上面給出的例子,你可以創建兩個基於公共列的RDD作爲兩者的密鑰,並根據密鑰加入它們 –