划分pyspark SQL中的所有列

时间:2017-11-13 20:14:59

标签: sql pyspark divide

我是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中执行此任务?

由于

1 个答案:

答案 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|
+---+---+