2016-10-02 75 views
1

我有兩個數據集加入兩個數據集一樣, (電影名,女演員的名字)和 (電影名,導演的名字)通過使用Scala的火花第一列

我想通過加入他們的行列(電影名稱,女演員的名字,導演的名字)。

import org.apache.spark.rdd.RDD 
import org.apache.spark.{SparkConf, SparkContext} 

import scala.io.Source 

object spark { 
    def main(args: Array[String]): Unit = { 
    val sparkConf = new SparkConf().setAppName("FindFrequentPairs").setMaster("local[2]") 
    val sc = new SparkContext(sparkConf) 
    val text1: RDD[String] = sc.textFile(args(0)) 
    val text2: RDD[String] = sc.textFile(args(1)) 

    val joined = text1.join(text2) 

我試圖使用'join',但它說'無法解析符號連接'。 你有什麼想法如何加入他們?

這是我的數據集的一部分,(filme name,actress)。

('"Please Like Me" (2013) {Rhubarb and Custard (#1.1)}', '$haniqua') 
('"Please Like Me" (2013) {Spanish Eggs (#1.5)}', '$haniqua') 
('A Woman of Distinction (1950) (uncredited)', '& Ashour, Lucienne') 
('Around the World (1943) (uncredited)', '& Ashour, Lucienne') 
('Chain Lightning (1950) (uncredited)', '& Ashour, Lucienne') 
+0

你的數據集都是'RDD [字符串]'...你會至少需要它們的格式爲'RDD [(String,String)]'。 – Alec

+0

但是,如果我使用RDD [(String,String)],它表示'RDD [String]的表達式不符合期望的類型RDD [(String,String)]。那麼,我應該轉換文本文件嗎? – tobby

+0

當然會!我的意思是你必須做一些工作來將你的數據集轉換成正確的形式。數據集中的字符串是否爲「」()? – Alec

回答

2

您必須首先爲您的數據集創建pairRDD,然後您必須應用連接轉換。您的數據集看起來不準確。

請考慮下面的例子。

**Dataset1** 

a 1 
b 2 
c 3 

**Dataset2** 

a 8 
b 4 

您的代碼應該像下面斯卡拉

val pairRDD1 = sc.textFile("/path_to_yourfile/first.txt").map(line => (line.split(" ")(0),line.split(" ")(1))) 

val pairRDD2 = sc.textFile("/path_to_yourfile/second.txt").map(line => (line.split(" ")(0),line.split(" ")(1))) 

val joinRDD = pairRDD1.join(pairRDD2) 

joinRDD.collect 

這裏是斯卡拉外殼結果

res10: Array[(String, (String, String))] = Array((a,(1,8)), (b,(2,4))) 
+0

我編輯了我的問題並添加了我的數據集。你能再檢查一次嗎?你顯示的方式不起作用。 – tobby

+0

另外,我試圖用''分割它們,但是有太多的逗號,所以不可能用逗號分割數據。 – tobby

+0

您的數據集格式不一致,您必須首先清理並格式化數據 –