【问题标题】:Adding a new column in the first ordinal position in a pyspark dataframe在 pyspark 数据框中的第一个序号位置添加一个新列
【发布时间】: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) 添加。

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


【解决方案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,,,])
        

        谢谢

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-06
          • 2021-12-26
          • 1970-01-01
          • 1970-01-01
          • 2021-07-09
          • 1970-01-01
          相关资源
          最近更新 更多