划分 pyspark 中的所有列 SQL

dividing all columns in pyspark SQL

我是 Spark 的新手,这可能是一个简单的问题。

我在 pyspark DF1 中有一个 table,其中有一个列名 "A" 和一些其他列。在各种情况下,其他列名可能会发生变化。我想通过将这些 "other" 列的值除以 A 来生成 table DF2。DF2 的列也将是 "other" 列。

例如

DF1 = sql_sc.createDataFrame([(1, 2,3), (2, 4,6), (3, 6,9), (4, 8,12), (5, 10,15)], ["A", "B","C"])    

结果将是 table 作为:

 DF2 = sql_sc.createDataFrame([(2,3), (2,3), (2,3), (2,3), (2,3)], ["B","C"]

如何在 pyspark 中完成此任务 SQL?

谢谢

您可以使用 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|
+---+---+