使用spark遇到的问题

本文介绍了在使用Spark时如何设置广播变量,并展示了在pyspark中进行数据分组、排序以及选择排名最高的记录的方法。同时,详细讲解了RANK、DENSE_RANK、ROW_NUMBER和ntile等排序函数的用法。

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

1.如何设置广播变量:

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql import Window

from pyspark.sql.types import StructField
from pyspark.sql.types import StructType
from pyspark.sql.types import StringType
from pyspark.sql.types import IntegerType
from pyspark.sql import HiveContext
from pyspark import SparkContext
from pyspark.sql import SQLContext
from functools import partial

spark = (SparkSession
                .builder
            .appName("gps-test-DockerLinuxContainer")
            .enableHiveSupport()
            .config("spark.executor.instances", "500").config("spark.sql.hive.mergeFiles", "true").config("spark.num-executors", "300").config("spark.locality.wait", "0")
            .config("spark.executor.memory","40g")
            .config("spark.executor.cores","4")
            .config("spark.driver.memory","12g")
            .config("spark.sql.shuffle.partitions","500")
            .config("spark.yarn.appMasterEnv.yarn.nodemanager.container-executor.class","DockerLinuxContainer")
            .config("spark.executorEnv.yarn.nodemanager.container-executor.class","DockerLinuxContainer")
            .config("spark.yarn.appMasterEnv.yarn.nodemanager.docker-container-executor.image-name","bdp-docker.jd.com:5000/wise_mart_bag:latest")
            .config("spark.executorEnv.yarn.nodemanager.docker-container-executor.image-name","bdp-docker.jd.com:5000/wise_mart_bag:latest")
            .config("spark.sql.adaptive.enabled", "true")
            .config("spark.rpc.message.maxSize","512" )
            .config("spark.sql.adaptive.repartition.enabled", "true")
            .config("spark.yarn.queue", "root.bdp_jmart_scr_union.bdp_jmart_cis_union.bdp_jmart_cis_online_spark")
            .getOrCreate())

model=spark.sparkContext.broadcast(value=???)
使用时使用model.value

2.对pyspark中的rdd分组(A)排序(B),保留排名第一的重复词,代码如下:

window = Window.partitionBy(['A']).orderBy(F.col("B").desc())
df_attvalue_process=df_attvalue_process.withColumn('rank', F.ntile(1000000000).over(window)).filter("rank= '1'").drop('rank')

3.pyspark中的多种排序函数:

RANK:可以生成不连续的序号,比如按分数排序,第一第二都是100分,第三名98分,那第一第二就会显示序号1,第三名显示序号3。

DENSE_RANK: 生成连续的序号,在上一例子中,第一第二并列显示序号1,第三名会显示序号2。

ROW_NUMBER: 顾名思义就是行的数值,在上一例子中,第一第二第三将会显示序号为1,2,3。

ntile:也可用于排序,需设置n

from pyspark.sql import functions as F

F.ntile(1000000000).over(window)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值