具有特定条件的 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()
两个 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()