为pyspark DataFrame增加一列

场景是为现有的dataFrame新增一列数据,这些数据与原有数据无关。其功能类似于pandas

的表A.join(表B)。

参考

python - PySpark - Adding a Column from a list of values - Stack Overflow

from pyspark.sql import SparkSession
import numpy as np

import pandas as pd
from pyspark.sql import functions as F

from pyspark.sql import Window



def create_sc():
    sc_conf = SparkConf()
    #     sc_conf.setMaster('spark://master:7077')
    sc_conf.setAppName('my-app')
    #     sc_conf.set("spark.sql.execution.arrow.enabled", "true")
    sc_conf.set("spark.driver.memory", "128g")
    sc_conf.set("spark.sql.crossJoin.enabled",True)
    sc_conf.set('spark.executor.memory', '256g')  # executor memory是每个节点上占用的内存。每一个节点可使用内存
    sc_conf.set("spark.executor.cores",
                '8')  # spark.executor.cores:顾名思义这个参数是用来指定executor的cpu内核个数,分配更多的内核意味着executor并发能力越强,能够同时执行更多的task
    sc_conf.set('spark.cores.max',
                40)  # spark.cores.max:为一个application分配的最大cpu核心数,如果没有设置这个值默认为spark.deploy.defaultCores
    sc_conf.set('spark.logConf', True)  # 当SparkContext启动时,将有效的SparkConf记录为INFO。
    sc_conf.set('spark.driver.maxResultSize', '20g')
    print(sc_conf.getAll())

    return SparkContext(conf=sc_conf)



if __name__ == '__main__':
    sc = create_sc()
    spark_session = SparkSession(sc)

    y = spark_session.createDataFrame([("Alberto", 2), ("Dakota", 444), ("haha", 77), ("hehe", 456)],
                                      ["name", "salary"])

    y.show()
    #这里实验把name和salary拆分,再拼起来    

    name_df = y.select("name")
    name_df = name_df.withColumn('index', F.row_number().over(Window.orderBy(F.monotonically_increasing_id())))
    name_df.show()

    salary_df = y.select("salary")
    salary_df = salary_df.withColumn('index', F.row_number().over(Window.orderBy(F.monotonically_increasing_id())))
    salary_df.show()

    res_df = name_df.join(salary_df, salary_df.index == name_df.index).drop("index")
    res_df.show()

    
    

res_df的结果和原始数据y相同

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PySpark DataFrame 是一种高效的 Python 数据处理工具,能够处理海量的数据,并且能够以非常高效率的方式调整 DataFrame 中的顺序。下面是具体的步骤: 1. 通过 select 函数选取需要的,指定的顺序,并保存到 list 中。例如,假设有一个 DataFrame df,其中包含 A、B、C、D 四,现在需要将顺序调整为 B、D、A、C,可以使用如下代码: cols = ['B', 'D', 'A', 'C'] new_df = df.select(cols) 2. 通过 withColumn 函数调整顺序,指定每一的名称和位置。例如,假设有一个 DataFrame df,其中包含 A、B、C、D 四,现在需要将顺序调整为 B、D、A、C,可以使用如下代码: new_df = df.withColumn("B", df["B"])\ .withColumn("D", df["D"])\ .withColumn("A", df["A"])\ .withColumn("C", df["C"]) 3. 通过 withColumnRenamed 函数改变名,然后再通过 select 函数选择需要的,并指定的顺序。例如,假设有一个 DataFrame df,其中包含 A、B、C、D 四,现在需要将顺序调整为 B、D、A、C,并将名分别改为 Column1、Column2、Column3、Column4,可以使用如下代码: new_df = df.withColumnRenamed("B", "Column1")\ .withColumnRenamed("D", "Column2")\ .withColumnRenamed("A", "Column3")\ .withColumnRenamed("C", "Column4")\ .select("Column1", "Column2", "Column3", "Column4") 通过这些方法,我们可以在 PySpark 中非常快速和简单地调整 DataFrame 中的顺序,满足各种数据处理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值