有什么方法可以在 Spark 中按列進行笛卡爾連接?
例如,給定一個資料框
------ ------ ------
|col_a |col_b |col_c |
------ ------ ------
|0 |10 |100 |
|0 |20 |200 |
|0 |30 |300 |
|0 |40 |400 |
------ ------ ------
結果是一組資料框
------ ------
|col_a |col_b |
------ ------
|0 |10 |
|0 |20 |
|0 |30 |
|0 |40 |
------ ------
------ ------
|col_a |col_c |
------ ------
|0 |100 |
|0 |200 |
|0 |300 |
|0 |400 |
------ ------
------ ------
|col_b |col_c |
------ ------
|10 |100 |
|20 |200 |
|30 |300 |
|40 |400 |
------ ------
我知道它可以在代碼中完成(通過創建列名元組串列并通過迭代進行選擇),但如果可能的話,我想通過在所有這些上呼叫相同的 UDF 來利用火花并行性,即。類似于 groupby().apply() 的東西。這可能嗎?
我正在使用帶有 pyspark 的 Spark 3.1.1
謝謝
uj5u.com熱心網友回復:
您的問題與 Spark 并行性無關。它不是一個cartesion產品,它只是一個列的組合。
Aselect是一個簡單的火花轉換,它將立即執行,您只需要 python 即可:
from itertools import combinations
df_list = [df.select(*cols) for cols in combinations(df.columns, 2)]
結果是:
df_list
[DataFrame[col_a: bigint, col_b: bigint],
DataFrame[col_a: bigint, col_c: bigint],
DataFrame[col_b: bigint, col_c: bigint]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/483626.html
標籤:Python 阿帕奇火花 pyspark apache-spark-sql
