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

Posted

技术标签:

【中文标题】在 pyspark 数据框中的第一个序号位置添加一个新列【英文标题】:Adding a new column in the first ordinal position in a pyspark dataframe 【发布时间】:2018-11-16 11:16:16 【问题描述】:

我有一个 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          |
+--------------+-------+-------+-------------+

【问题讨论】:

使用 withColumn 和 select('new_column',other columns) 添加。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

这在逻辑上等价于下面的SQL代码:

SELECT 0 AS new_column, * FROM df

【讨论】:

【参考方案3】:
df.select(['new_column', 'col1', 'col2', 'col3'])

【讨论】:

【参考方案4】:

您可以使用 INSERT 功能

    df.insert(0, 'new_column', [data,,,])

谢谢

【讨论】:

以上是关于在 pyspark 数据框中的第一个序号位置添加一个新列的主要内容,如果未能解决你的问题,请参考以下文章

PySpark - 从列表中获取字符串位置

pyspark 将最小值添加回数据框

layui table中添加一列序号列

向现有的pyspark数据框添加一列

pyspark 数据框如果不存在则添加一列

如何在特定小时的滚动平均值的熊猫数据框中添加一列