2016-10-02 27 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

您的数据集格式不一致,您必须首先清理并格式化数据 –