如何在连接两个数据集时指定Apache Spark中的键

时间:2016-04-13 23:22:11

标签: hadoop apache-spark

我正在加载两个文件 -

  f1 (a,b,c,d,e,f,g,h,i)
  f2 (x,y,z,a,b,c,f,r,u)

此加载操作为我提供了元组列表。对于每一行,创建一个元组。

file1和file2的模式如下 -

  rdd.keyBy(func)

我想基于字段a,b,c加入这两个数据集。我做了一些研究,发现下面的方法可能有用。

{{1}}

但是,我找不到一种简单的方法来指定键和连接两个数据集。 任何人都可以在不使用DataFrames的情况下演示如何做到这一点?使用SparkSQL是可以的,但如果没有SparkSQL可以做到最好。

1 个答案:

答案 0 :(得分:2)

此加载操作为我提供了元组列表

不,它会给你一个RDD[String]

您可以获取字符串,并将其转换为您想要的任何内容。

对于您的用例,您可以将每一行转换为((a,b,c),(d,e,f,g,h,i))

f1 = sc.textFile("s3://testfolder1/file1").map { line =>
val a::b::c::d::e::d::f::g::h::i::other = line.split(YOUR_DELIMITER).toList
((a,b,c),(d,e,f,g,h,i))
}

f2 = sc.textFile("s3://testfolder1/file1").map { line =>
val a::b::c::d::e::d::f::g::h::i::other = line.split(YOUR_DELIMITER).toList
((a,b,c),(d,e,f,g,h,i))
}

然后,f1.join(f2)应该正常工作。