📜  PySpark 数据框基于其他列添加列

📅  最后修改于: 2022-05-13 01:55:31.889000             🧑  作者: Mango

PySpark 数据框基于其他列添加列

在本文中,我们将了解如何将基于另一列的列添加到 Pyspark Dataframe。

创建用于演示的数据框:

在这里,我们将从给定数据集的列表中创建一个数据框。

Python3
# Create a spark session
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('SparkExamples').getOrCreate()
  
# Create a spark dataframe
columns = ["Name", "Course_Name",
           "Months",
           "Course_Fees", "Discount",
           "Start_Date", "Payment_Done"]
data = [
    ("Amit Pathak", "Python", 3, 10000, 1000,
     "02-07-2021", True),
    ("Shikhar Mishra", "Soft skills", 2,
     8000, 800, "07-10-2021", False),
    ("Shivani Suvarna", "Accounting", 6,
     15000, 1500, "20-08-2021", True),
    ("Pooja Jain", "Data Science", 12,
     60000, 900, "02-12-2021", False),
]
  
df = spark.createDataFrame(data).toDF(*columns)
  
# View the dataframe
df.show()


Python3
new_df = df.withColumn('After_discount',
                       df.Course_Fees - df.Discount)
new_df.show()


Python3
df.registerTempTable('table')
newDF = spark.sql('select *, Course_Fees - Discount as Total from table')
newDF.show()


Python3
# import the functions as F from pyspark.sql
import pyspark.sql.functions as F
from pyspark.sql.types import IntegerType
  
# define the sum_col
def Total(Course_Fees, Discount):
    res = Course_Fees - Discount
    return res
  
# integer datatype is defined
new_f = F.udf(Total, IntegerType())
  
# calling and creating the new
# col as udf_method_sum
new_df = df.withColumn(
  "Total_price", new_f("Course_Fees", "Discount"))
  
# Showing the Dataframe
new_df.show()


输出:



方法 1:使用 withColumns()

它用于更改值、转换现有列的数据类型、创建新列等等。

蟒蛇3

new_df = df.withColumn('After_discount',
                       df.Course_Fees - df.Discount)
new_df.show()

输出:

方法二:使用SQL查询

这里我们将在 Pyspark 中使用 SQL 查询,我们将在 createTempView() 的帮助下创建表的临时视图,并且该临时表的生命周期取决于 sparkSession 的生命周期。 registerTempTable() 将创建临时表,如果它不可用,或者如果它可用则替换它。



然后在创建表后通过 SQL 子句选择表,它将所有值作为一个字符串。

蟒蛇3

df.registerTempTable('table')
newDF = spark.sql('select *, Course_Fees - Discount as Total from table')
newDF.show()

输出:

方法 3:使用 UDF

在此方法中,我们将定义用户定义的函数,该函数将接受两个参数并返回总价。这个函数允许我们根据我们的要求创建一个新函数。

现在我们定义 UDF函数的数据类型并创建将返回值的函数,该值是行中所有值的总和。

蟒蛇3

# import the functions as F from pyspark.sql
import pyspark.sql.functions as F
from pyspark.sql.types import IntegerType
  
# define the sum_col
def Total(Course_Fees, Discount):
    res = Course_Fees - Discount
    return res
  
# integer datatype is defined
new_f = F.udf(Total, IntegerType())
  
# calling and creating the new
# col as udf_method_sum
new_df = df.withColumn(
  "Total_price", new_f("Course_Fees", "Discount"))
  
# Showing the Dataframe
new_df.show()

输出: