apache-spark - 如何使用火花进行并行操作
问题描述
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.mean
if age
(age>29
带有 name weighted_age
),另一列带有age^2
if 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
条件))
解决方案
推荐阅读
- json - 由于 JSON::ParserError 随机失败:822:意外令牌
- jquery - Safari 不加载一张图片
- c# - 无法在 C# 中读取 PDF 控件
- c# - System.Net.Mail.Attachment 文件 url 包含 #
- android - 在 Google 日历中为“一天两次”、“一天三次”等重复事件创建提醒时出现问题
- android - 为什么在我删除由 Create New Project 向导创建的代码 setSupportActionBar(toolbar) 后,选项卡式 Activity 运行良好?
- objective-c - 10.9 中的 NSScrollView 辅助功能问题
- php - PHP 如何让我的 csv 表正确显示?
- c - 将用户输入与 C 编程语言中预定义的字符数组进行比较
- python - 在 Python 上使用 scipy.least_squares 进行正弦波频率估计