我是Spark的新手,这可能是一个直截了当的问题。
我在pyspark DF1中有一个表,列名为“A”,还有其他一些列。其他列名称可能会在各种情况下更改。我想通过将这些“其他”列的值除以A来生成表DF2.DF2的列也将是“其他”列。
例如
DF1 = sql_sc.createDataFrame([(1, 2,3), (2, 4,6), (3, 6,9), (4, 8,12), (5, 10,15)], ["A", "B","C"])
结果将是一个表格:
DF2 = sql_sc.createDataFrame([(2,3), (2,3), (2,3), (2,3), (2,3)], ["B","C"]
如何在pyspark SQL中执行此任务?
由于
答案 0 :(得分:0)
您可以使用DataFrame.columns迭代列,然后使用除法运算符来执行行式数学运算。像这样:
from pyspark.sql.functions import col
DF1 = spark.createDataFrame([(1, 2,3), (2, 4,6), (3, 6,9), (4, 8,12), (5, 10,15)], ["A", "B","C"])
DF1.show()
df = DF1
for field in DF1.columns:
if field != 'A':
df = df.withColumn(field, col(field) / col("A"))
DF2 = df.drop('A')
DF2.show()
哪个输出:
+---+---+---+
| A| B| C|
+---+---+---+
| 1| 2| 3|
| 2| 4| 6|
| 3| 6| 9|
| 4| 8| 12|
| 5| 10| 15|
+---+---+---+
+---+---+
| B| C|
+---+---+
|2.0|3.0|
|2.0|3.0|
|2.0|3.0|
|2.0|3.0|
|2.0|3.0|
+---+---+