我正在加载两个文件 -
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可以做到最好。
答案 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)
应该正常工作。