首页 > 解决方案 > 如何使用火花进行并行操作

问题描述

data.frame我有以下内容spark

import findspark
findspark.init()

from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
sc = spark.sparkContext
from pyspark.sql import functions as sf
from pyspark.sql.functions import col, when, lit

ddf = spark.createDataFrame([[None, 'Michael',2],
                             [30, 'Andy',3],
                             [19, 'Justin',4],
                             [30, 'James Dr No From Russia with Love Bond',6]],
                            schema=['age', 'name','weights'])
ddf.show()

在这个简单的示例中,我想创建两列:一列带有weighted.meanif ageage>29带有 name weighted_age),另一列带有age^2if age<=29(带有 name age_squared

In order to do so I can do this

from pyspark.sql import functions as f
weightedMean = ddf.filter(f.col('age')>29).select(f.sum(f.col('age')*f.col('weights'))/f.sum(f.col('weights'))).first()[0]

ddf.withColumn('weighted_age', f.when(f.col('age') > 29, weightedMean))\
    .withColumn('age_squared', f.when(f.col('age') <= 29, f.col('age')*f.col('age')))\
    .show(truncate=False)

我的问题是,有没有办法针对这两个if条件并行执行此操作(因此,创建了两列。一个是在条件 age >29(第一个if条件)下创建的,另一个是在条件 age < = 29(第二个if条件))

标签: apache-sparkpysparkapache-spark-sql

解决方案


推荐阅读