根据列名划分2个PySpark DataFrames
Divide 2 PySpark DataFrames Based on Column Names
我有 2 个包含数百列的 DataFrame。 Df1
看起来像这样:
id | col1 | col2 | col3 | .....
1 .2 .3 .3
2 .1 .4 .2
....
Df2
看起来像这样,只有 1 行值:
col1 | col2 | col3 | .....
.2 .3 .3
我想将 Df1
的每一行除以 Df2
,所以我应该得到这样的结果:
id | col1 | col2 | col3 | .....
1 .2/.2 .3/.3 .3/.3
2 .1/.2 .4/.3 .2/.3
如果我有数百个列,我该如何在连接期间不特别指定列名的情况下执行此操作?提前致谢!
我得到了 df2 的值并用 df1 压缩了它。然后遍历压缩结构,得到除法值。希望这可以帮助。这是我得到的代码片段和输出。
from pyspark.sql.functions import col
df1 = spark.createDataFrame( [('A',2,4),('B',6,8), ('C',10,12) ],['col1','col2','col3'] )
df2 = spark.createDataFrame( [(2,2)],['div1','div2'] )
df1.show()
df2.show()
lr = df2.rdd.take(1)
for c, v in zip(df1.columns[1:], lr[0]):
df1 = df1.withColumn(c, col(c)/v)
df1.show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| A| 2| 4|
| B| 6| 8|
| C| 10| 12|
+----+----+----+
+----+----+
|div1|div2|
+----+----+
| 2| 2|
+----+----+
+----+----+----+
|col1|col2|col3|
+----+----+----+
| A| 1.0| 2.0|
| B| 3.0| 4.0|
| C| 5.0| 6.0|
+----+----+----+
我有 2 个包含数百列的 DataFrame。 Df1
看起来像这样:
id | col1 | col2 | col3 | .....
1 .2 .3 .3
2 .1 .4 .2
....
Df2
看起来像这样,只有 1 行值:
col1 | col2 | col3 | .....
.2 .3 .3
我想将 Df1
的每一行除以 Df2
,所以我应该得到这样的结果:
id | col1 | col2 | col3 | .....
1 .2/.2 .3/.3 .3/.3
2 .1/.2 .4/.3 .2/.3
如果我有数百个列,我该如何在连接期间不特别指定列名的情况下执行此操作?提前致谢!
我得到了 df2 的值并用 df1 压缩了它。然后遍历压缩结构,得到除法值。希望这可以帮助。这是我得到的代码片段和输出。
from pyspark.sql.functions import col
df1 = spark.createDataFrame( [('A',2,4),('B',6,8), ('C',10,12) ],['col1','col2','col3'] )
df2 = spark.createDataFrame( [(2,2)],['div1','div2'] )
df1.show()
df2.show()
lr = df2.rdd.take(1)
for c, v in zip(df1.columns[1:], lr[0]):
df1 = df1.withColumn(c, col(c)/v)
df1.show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| A| 2| 4|
| B| 6| 8|
| C| 10| 12|
+----+----+----+
+----+----+
|div1|div2|
+----+----+
| 2| 2|
+----+----+
+----+----+----+
|col1|col2|col3|
+----+----+----+
| A| 1.0| 2.0|
| B| 3.0| 4.0|
| C| 5.0| 6.0|
+----+----+----+