如何使用RDD连接两个表?

时间:2017-09-11 18:57:34

标签: scala apache-spark pyspark

我有两个文本文件:color.txtshades.txt

具有以下值:

color.txt

1 | RED 
2 | GREEN
3 | BLUE

shades.txt

1 | 1 | dark red
2 | 1 | light red
3 | 2 | dark green
4 | 3 | light blue
5 | 3 | sky blue

如何使用RDD加入这两个表。 shades.txt的第二列是来自color.txt的密钥。

到目前为止我做了什么

var colorRdd = sc.textFile("/pathto/color.txt")
var shadesRdd = sc.textFile("/pathto/shaes.txt")

var colorPairRdd = colorRdd.map{ case (colorkey, colorname) => ((colorkey), colorname)}

有了这个我得到一个错误:

found   : (T1, T2)
 required: String

1 个答案:

答案 0 :(得分:1)

  1. 阅读每个文件并创建RDD
  2. rdd= sc.textFile("file.txt")
    
    1. 解析字符串(您应该已经RDD[String])。
    2. 例如,下面的map函数返回按分隔符分割每一行。

      rdd.map(x => x.split("\\|"))
      
      1. 创建PairRDD。从数组字符串构建对:
      2.  
        rdd.map(a => (a[0],a[1]))
        

        可以组合和重构步骤2和3以获得更好的代码。

        1. 加入两个RDD
        2.    
          rdd1.join(rdd2).map (process here )