Spark 的用户订单表连接,是我用得比较多的一招。你要做多表啊、订单归属啊,这种场景下可少不了它。
内连接是最常见的一种连接方式。简单说就是“双方都有记录的才留下”,类似于两个人打招呼,谁没回你就自动忽略。用userId
做主键,一对一匹配挺方便的。
我一般用Spark SQL或者DataFrame API搞定连接。先用spark.read.format("csv")
把用户和订单数据读进来,设置下字段啥的,as
个别名,方便后面操作。
正式连接时,记得用join
函数。Scala 写法像这样:
val joinedDF = usersDF.join(ordersDF, "userId")
Python 版本就:
joinedDF = usersDF.join(ordersDF, usersDF["userId"] == ordersDF["userId"])
结果出来后可以select
你想要的字段,比如users.*
和订单的orderId
,再show()
看看,响应也快,代码也简单。
如果数据量大,建议顺手优化下,比如广播小表、调一下分区。还有就是记得提前好脏数据,不然连接的时候会出问题。
相关连接操作的资料你也可以看看:内连接原理、多表连接技巧,还有这个SQL 内连接进阶也还不错。
如果你正在搞数据项目,尤其是用户行为或电商相关的,这招真的蛮实用的。