如何在连接两个数据集时在apachespark中指定键

owfi6suc  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(360)

我加载两个文件如下-

f1 = sc.textFile("s3://testfolder1/file1")
  f2 = sc.textFile("s3://testfolder2/file2")

这个加载操作给我一个元组列表。每行创建一个元组。
file1和file2的架构如下-

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

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

rdd.keyBy(func)

但是,我找不到一种简单的方法来指定键并连接两个数据集。有人能演示一下如何不用Dataframe就可以做到这一点吗?使用sparksql是可以的,但是如果不使用sparksql就可以做到,那就最好了。

hgb9j2n6

hgb9j2n61#

这个加载操作给我一个元组列表
不,它会给你一个 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) 应该就行了。

相关问题