如何在PySpark中的另一个数据框的列中创建一个数据框的列

时间:2019-08-20 15:56:53

标签: python apache-spark pyspark

假设我具有以下Spark DataFrame df

+-----+-------+-------+-------+
| id  | col1  |  col2 |  col3 |
+-----+-------+-------+-------+
| "a" |   10  |  5    |   75  |
| "b" |   20  |  3    |   3   | 
| "c" |   30  |  2    |   65  |
+-----+-------+-------+-------+

我想创建一个包含以下内容的新数据框new_df

1)每行的id

2)col1 / col2

之间的分度值

3)col3 / col1

之间的除法值

new_df的期望输出是:

+-----+-------+-------+
| id  | col1_2| col3_1|
+-----+-------+-------+
| "a" |  2    |  7.5  |
| "b" |  6.67 |  0.15 | 
| "c" |   15  |  2.17 |
+-----+-------+-------+

我已经尝试过

new_df = df.select("id").withColumn("col1_2", df["col1"] / df["col2"))

没有运气

2 个答案:

答案 0 :(得分:2)

使用select

df.select('id', 
  (df.col1 / df.col2).alias('col1_2'), 
  (df.col3 / df.col1).alias('col3_1')
).show()
+---+-----------------+------------------+
| id|           col1_2|            col3_1|
+---+-----------------+------------------+
|  a|              2.0|               7.5|
|  b|6.666666666666667|              0.15|
|  c|             15.0|2.1666666666666665|
+---+-----------------+------------------+

selectExpr

df.selectExpr('id', 'col1 / col2 as col1_2', 'col3 / col1 as col3_1').show()
+---+-----------------+------------------+
| id|           col1_2|            col3_1|
+---+-----------------+------------------+
|  a|              2.0|               7.5|
|  b|6.666666666666667|              0.15|
|  c|             15.0|2.1666666666666665|
+---+-----------------+------------------+

答案 1 :(得分:-1)

Spring