在pyspark数据框中的第一个顺序位置添加新列

时间:2018-11-16 11:16:16

标签: python apache-spark pyspark apache-spark-sql

我有一个像这样的pyspark数据框:

+--------+-------+-------+
| col1   | col2  | col3  |
+--------+-------+-------+
|  25    |  01   |     2 |
|  23    |  12   |     5 | 
|  11    |  22   |     8 |
+--------+-------+-------+

,我想通过添加新列来创建新数据框:

+--------------+-------+-------+-------+
| new_column   | col1  | col2  | col3  |
+--------------+-------+-------+-------+
|  0           |  01   |     2 |  0    |
|  0           |  12   |     5 |  0    |
|  0           |  22   |     8 |  0    |
+--------------+-------+-------+-------+

我知道我可以通过添加列:

df.withColumn("new_column", lit(0))

但它最终像这样添加列:

+--------------+-------+-------+-------------+
| col1         | col1  | col2  | new_column  |
+--------------+-------+-------+-------------+
|  25          |  01   |     2 |  0          |
|  23          |  12   |     5 |  0          |
|  11          |  22   |     8 |  0          |
+--------------+-------+-------+-------------+

4 个答案:

答案 0 :(得分:2)

您可以使用select重新排列列。

df = df.select('new_column','col1','col2','col3')
df.show()

答案 1 :(得分:0)

df.select(['new_column', 'col1', 'col2', 'col3'])

答案 2 :(得分:0)

您始终可以使用select对spark DataFrame中的列进行重新排序,如this post所示。

在这种情况下,您还可以使用selectalias一步实现预期的输出,如下所示:

df = df.select(lit(0).alias("new_column"), "*")

从逻辑上讲,它等效于以下SQL代码:

SELECT 0 AS new_column, * FROM df

答案 3 :(得分:0)

您可以使用INSERT函数

[45]

谢谢