具有特定条件的 Pyspark crossJoin

Pyspark crossJoin with specific condition

两个 5 行的数据帧的交叉连接给出了 25 rows (5*5) 的数据帧。 我想要的是做一个 crossJoin 但它“不完整”。 例如:

df1:                       df2:
+-----+                    +-----+
|index|                    |value|
+-----+                    +-----+
|    0|                    |    A|
|    1|                    |    B|
|    2|                    |    C|
|    3|                    |    D|
|    4|                    |    E|
+-----+                    +-----+

结果必须是行数 < 25 的数据帧,而对于 index 中的每一行,随机选择 value 中完成交叉连接的行数。 它将是这样的:

+-----+-----+
|index|value|
+-----+-----+
|    0|    D|
|    0|    A|
|    1|    A|
|    1|    D|
|    1|    B|
|    1|    C|
|    2|    A|
|    2|    E|
|    3|    D|
|    4|    A|
|    4|    B|
|    4|    E|
+-----+-----+

谢谢

您可以尝试使用 sample(withReplacement, fraction, seed=None) 来减少交叉连接后的行数。

Example:

spark.sql("set spark.sql.crossJoin.enabled=true")
df.join(df1).sample(False,0.6).show()