spark学习入门

本文介绍了Spark的基本原理,包括其与MR的对比及数据存储需求。详细讲解了Spark的使用,涵盖UDF创建、条件选择、条件join、RDD转字典以及分组计算等操作,提供了具体的代码示例,帮助读者快速上手Spark开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spark原理

1.spark是跟mr同等级别的计算框架,不提供源数据存储功能。
2.数据存储在hdfs上或其他分布式系统上,若只有一个csv放在单机上,其他slave节点读取不到文件,无法创建rdd会导致任务执行失败。

Spark使用

udf

传入一个字符串代表一列,udf中自动遍历每个值,不需要自己写遍历函数,只需当作传入的为一行数据即可。

条件选择

DF.withColumn(“FLG”, when((col(“FLG1”)‘T’) & ((col(“FLG2”)‘F’) | (col(“FLG2”)==‘T’)),lit(‘F’)).otherwise(lit(‘T’))).show()

条件join

join条件可以是on = a>b

rdd转字典

df = spark.createDataFrame(pd.DataFrame([1, 1, 2, 5, 5, 5, 6], columns=[‘MYCOLUMN’]))

df_count = df.groupby(‘MYCOLUMN’).count().sort(‘MYCOLUMN’)

dict(df_count.rdd.map(lambda x: (x[‘MYCOLUMN’], x[‘count’])).collect())

分组计算

https://blog.youkuaiyun.com/lanyuelvyun/article/details/109244033
from pyspark.sql import SparkSession # SparkConf、SparkContext 和 SQLContext 都已经被封装在 SparkSession
from pyspark.sql import functions as F
from pyspark.sql import Window
from pyspark.sql import Row
from pyspark.sql import types as T # spark df的数据类型
import pandas as pd
import numpy as np
from sklearn import metrics

载入模型分:从本地导入,并转换成spark_df
df = pd.read_csv(r’model_pvalue.csv’, sep=’,’)
spark_df = spark.createDataFrame(df)

自定义函数(计算AUC),并且变成UDF
“”“注意:自定义函数的重点在于定义返回值的数据类型,这个返回值的数据类型必须与该函数return值的数据类型一致,否则会报错。
该例子中,该函数return的值auc,是string类型,在将该函数定义成udf的时候,指定的返回值类型,也必须是string!!”""
def get_auc(label, pvalue):
auc = str(metrics.roc_auc_score(label, pvalue)) # 如果不知道是什么类型,就显示的强制转换成需要的数据类型,比如说使用str()
return auc
get_auc_udfs = F.udf(get_auc, returnType=T.StringType()) # 定义成udf,并且此udf的返回值类型为string

分组聚合操作:分别计算每月样本量、逾期率、AUC
https://blog.youkuaiyun.com/lanyuelvyun/article/details/109244033:
“”“使用上面定义的UDF,结合F.collect_list(col)来实现UDAF的功能。
F.collect_lits(col)的作用是将列col的值变成一个list返回.”""
df_result = df_v12_online.groupby(‘apply_month’).
agg(
F.count(‘uid’).alias(‘uid_cnt’)
,F.mean(‘label’).alias(‘bad_rate’) #pyspark自有的聚合函数F.mean()的使用方法
,get_auc_udfs(F.collect_list(F.col(‘label’).cast(‘int’)), F.collect_list(F.col(‘model_pvalue’).cast(‘float’))).alias(‘auc’) #利用自定的UDF,实现指定聚合计算
)
df_result.show()

https://blog.youkuaiyun.com/qq_42363032/article/details/118298108:
def row_dealwith(data):
ids = list(data.keys())[0]
values = data.get(ids)
# print(ids, values[0], values[1])
print(ids, len(values[0]))
print()

dardds.foreach(row_dealwith)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值