Python Pyspark在具有数百万条记录的2个数据帧之间进行交叉连接

Python Pyspark在具有数百万条记录的2个数据帧之间进行交叉连接,python,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Python,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有两个数据帧A(3500万条记录)和B(30000条记录) A |Text | ------- | pqr | ------- | xyz | ------- B |Title | ------- | a | ------- | b | ------- | c | ------- 下面的数据帧C是在a和B之间交叉连接后获得的 c = A.crossJoin(B, on = [A.text == B.Title) C |text | Title | -------------

我有两个数据帧A(3500万条记录)和B(30000条记录)

A

|Text |
-------
| pqr  |
-------
| xyz  |
------- 
B

|Title |
-------
| a  |
-------
| b  |
-------
| c  |
------- 
下面的数据帧C是在a和B之间交叉连接后获得的

c = A.crossJoin(B, on = [A.text == B.Title)
C

|text | Title |
---------------
| pqr  | a    |
---------------
| pqr  | b    |
---------------
| pqr  | c    |
---------------
| xyz  | a    |
---------------
| xyz  | b    |
---------------
| xyz  | c    |
---------------
以上两列均为字符串类型

我正在执行以下操作,导致火花错误(由于阶段故障,作业中止)

关于如何进行此联接以避免结果操作上的Spark error()有什么建议吗


尝试使用
广播
连接

from pyspark.sql.functions import broadcast
c = functions.broadcast(A).crossJoin(B)
如果您不需要和额外的列“包含”列thne,您可以只过滤它作为

display(c.filter(col("text").contains(col("Title"))).distinct())

你真的在做交叉连接吗?正如在“完全没有联接条件”中一样?查看编辑的问题,如果指定联接列,则不希望交叉联接。我建议你用更少的数据来测试这个。如果Spark在这些数据集上进行完全交叉连接,如果我的数学正确的话,您将得到超过1万亿行。您能在问题中粘贴Spark错误吗?我想看看dataframe B标题列中的任何记录是否作为dataframe a文本列中的子字符串存在。这就是我做交叉连接的原因。体积很大。我将尝试使用一个样本,看看它是否有帮助。谢谢
display(c.filter(col("text").contains(col("Title"))).distinct())