Python Pyspark在具有数百万条记录的2个数据帧之间进行交叉连接
我有两个数据帧A(3500万条记录)和B(30000条记录) APython 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 | -------------
|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())