如何解决使用Spark替换联接功能
我有以下数据框:
Dataframe1
+---------------+
|id_data |
+---------------+
|[1,20,3] |
|[5,40] |
|[50,90] |
|[30,70] |
+---------------+
id_data的类型:array<integer>
Dataframe2
+---------------+
|id_data2 |
+---------------+
|20 |
|90 |
|100 |
+---------------+
我想要以下输出:
+---------------+
|id_data2 |
+---------------+
|20 |
|90 |
+---------------+
我使用join
Dataset <Row> result = Dataframe2.as("data1").join( Dataframe1.as("data2"),expr("array_contains(data2.id_data,data1.id_data2)"));
我有大量数据,并且在性能方面非常繁琐。
如果没有join function
使用带有Java语言的Spark,是否有可能做到这一点?
我需要你的帮助。
解决方法
您可以使用explode
功能。这是一个Scala代码。
df1.withColumn("id_data1",explode($"id_data"))
.join(df2,$"id_data1" === $"id_data2","inner")
.select("id_data1")
.show
+--------+
|id_data1|
+--------+
| 20|
| 90|
+--------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。