我正在尝试使用pyspark对数据库进行重复数据删除,作为管道的一部分,我想从两个相同的左右数据帧创建一个数据帧。这些具有共享索引。
最初我很懒,只是使用了CROSS JOIN,但这会导致重复的连接(从左到右与从右到左相同)。但是我现在需要对代码进行一些优化,而我想知道实现这种连接的最佳方法是什么。谁能建议什么?
l_df = spark.createDataFrame([('A',), ('B',), ('C',), ('D',)], ['l_idx'])
r_df = spark.createDataFrame([('A',), ('B',), ('C',), ('D',)], ['r_idx'])
l_df.createOrReplaceTempView('l_df')
r_df.createOrReplaceTempView('r_df')
block_df = spark.sql('''
SELECT *
FROM l_df
CROSS JOIN r_df
''')
block_df.show()
这将导致所有组合。
但是我正在寻找..
A B
A C
A D
B C
B D
C D
仅
感谢jxc! 解决了您的建议!
答案 0 :(得分:0)
它将起作用。请在下面找到。
>>> bdf = spark.sql("select * from l_df CROSS JOIN r_df WHERE l_df.l_idx < r_df.r_idx")
>>> bdf.show()
+-----+-----+
|l_idx|r_idx|
+-----+-----+
| A| B|
| A| C|
| A| D|
| B| C|
| B| D|
| C| D|
+-----+-----+