PySpark sql 中一些函数的总结(持续更新)

PySpark | SparkSQL函数 | SparkSQL运行流程 SparkSQL函数定义,SparkSQL整合Hive 阅读详情

看到什么函数就记录了,没有什么逻辑关系

spark 中DataFrame 和 pandas的DataFrame的区别

 1. F.split() 和 df.withColumn()

from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.types import *


df = spark.sql(sql) 

split_col = F.split(df_order['xxxx'], '\|')  # 对列切分
df_order = df_order.withColumn('llat', split_col.getItem(0).cast('float')) #withColumn 新增一列,第二个参数传入已有列的Column对象,否则会报错

2.   F.collect_list() 和 df.groupby()

F.collect_list() 聚合函数,返回一个list

Spark SQL/DataFrame/DataSet操作(三)-----分组聚合groupBy_微步229的博客-优快云博客

df_group = df_order.groupby(['user_id', 'loc_h3_id']).agg(
        F.collect_list("loaded_latlon").alias("loaded_latlon"),
        F.collect_list("order_datetime").alias("time"),
        F.collect_list("sl_distance").alias("sl_distance")). \
        filter(F.size('loaded_latlon') >= 2).persist() # 持久化

3.  F.udf()   第一个传入函数名,函数可以用lambda表达式;第二个是返回类型,如果有多个返回值,用StructType()

def get_h3_heat_schema(res=12):
    schema = StructType([
        StructField("h3_res{}_d7".format(res), IntegerType(), False),
        StructField("h3_res{}_d14".format(res), IntegerType(), False),
        StructField("h3_res{}_d30".format(res), IntegerType(), False),
        StructField("h3_res{}_d60".format(res), IntegerType(), False),
        StructField("h3_res{}_d90".format(res), IntegerType(), False),
        StructField("h3_res{}_d120".format(res), IntegerType(), False),
        StructField("h3_res{}_decay7".format(res), FloatType(), False),
        StructField("h3_res{}_decay30".format(res), FloatType(), False),
    ])
    return schema

def get_h3_features(data):
    # 获取h3相关特征feature
    feature_list = []
    interval_list = [7, 14, 30, 60, 90, 120]
    for interval in interval_list:
        feature_list.append(len(list(filter(lambda x: x <= interval, data))))

    head_decay_7, head_decay_30 = 0, 0
    for time in data:
        head_decay_7 += math.pow(DECAY_7, time)
        head_decay_30 += math.pow(DECAY_30, time)
    feature_list.extend([round(head_decay_7, 2), round(head_decay_30, 2)])
    return feature_list

schema = get_h3_heat_schema(11)
udf_get_h3_features = F.udf(get_h3_features, schema)
df = df_order.groupBy('load_h3_11') \
            .agg(F.collect_list('time_days').alias("time_days"), \
                 F.countDistinct('user_id').alias("h3_11_user_cnt")) \
            .withColumn('h3_11_heat', udf_get_h3_features(F.col('time_days'))) \
            .select('load_h3_11', 'h3_11_user_cnt', 'h3_11_heat.*')

简单的可以使用以下方式注册udf函数

@F.udf(returnType=IntegerType())
def get_time_ago(order_date, end_date):
    order_date = datetime.strptime(order_date, '%Y-%m-%d %H:%M:%S')
    return (end_date - order_date).days + 1

4. .alias()  # alias()起别名后在dataframe会增加一个新列,和withColumn()效果一致

5.  F.struct()   # 这种数据结构同C语言的结构体,内部可以包含不同类型的数据

df = df_order.groupBy('loc_h3_11') \
            .agg(F.collect_list(F.struct('load_h3_12', 'time_days')).alias("tuple")) \
            .withColumn('trans_prob', get_trans_prob(F.col('tuple'))) \
            .drop('tuple')

6.  F.lit(x)  创建一列值为x的列,也可以把这个值作为参数

第一种用法:

df.withColumn("spark_user",F.lit(True))

结果如下: 

 第二种用法:

@F.udf(returnType=StringType())
def lat_lng_to_h3(lat, lng, h3_level=12):
    """
    map lng lat to h3
    """
    return h3.geo_to_h3(lat, lng, h3_level)

df_order = df_order.withColumn('loc_h3_11', lat_lng_to_h3(F.col('alat'), F.col('alng'), F.lit(11)))  #把一列的11作为参数传入

7. F.countDistinct()   去重统计

8. df.select()  和 df.selectExpr()  

Spark---DataFrame学习(二)——select、selectExpr函数_stan1111的博客-优快云博客_selectexpr

9.   两个表进行关联的方式

cond = [order_df.user_id == personalized_df.user_id, order_df.loc_h3_9 == personalized_df.loc_h3_id]
    joined_df = order_df.join(personalized_df, on=cond, how='inner'). \
        drop(personalized_df.user_id)  # on传入的是条件,how传入的是关联方式,有inner、left、right、outer,关联完记得要把两个表里的相同列名删除一个,否则会多出来一个

10.  F.explode()  把列数据变为多个行数据

spark之explode()方法--- 行转列_卢子墨的博客-优快云博客_spark中explode

11. 将列中为空的值过滤掉

order_df = order_df.filter(F.col('slat').isNotNull())

12. F.filter(condition)  # 保留满足条件的值

PySpark系列:pyspark udf的使用 PySpark系列:udf的使用 目录PySpark系列:udf的使用前言1. 直接使用udf2. udf作为不带参装饰器3. udf作为带参装饰器 前言 pyspark.sql.functions提供了很多预定义的函数用来对列数据进行处理,有三角函数、数学函数、agg相关函数、窗口函数、字符串处理函数、列编解码函数、时间相关函数等。但在实际使用中,依然会遇到很多复杂的数据结构,下面举例来说明udf的使用。 官网上对udf的说明:pyspark.sql.functions.udf. 本文使用的一些包和模块: 阅读详情

相关推荐

PySpark学习 | 常用的 68 个函数 | 解释 + python代码

博文函数顺序以及代码部分参考Spark Python API函数学习:pyspark API系列,并在此基础上结合PySpark官方文档以及参考各位博主的优秀文章对各个函数进行了解释。代码全部手撸过,可以运行。 实验环境可以按照在windows上面安装并用jupyter运行pyspark进行配置: python 3 Hadoop 2.7 PySpark 2.2.3 Windows 10 打开cmd...

十三 8498

pyspark 条件_pyspark常用函数

添加新的一列new_col_name 是新的一列的名字,F.lit(1)是全部都为 1 的一列,可以改成其他可以返回列的表达式df = df.withColumn('new_col_name', F.lit(1))输出dataframe的大小print("df.shape :", df.count(), len(df.columns))按行合并两个datafeame两个df必须要有相同的colum...

weixin_34653299的博客 1117

PySpark在Databricks中稳定Upsert到Azure SQL的实战指南

Upsert(插入或更新)是现代数据工程中保障增量数据一致性的核心操作,其本质是在目标表中根据主键或业务键智能判断执行INSERT还是UPDATE。在云原生架构下,PySpark作为分布式数据处理语言,与Azure SQL这一高可用、强事务的关系型终点深度协同,成为企业级实时同步的关键技术栈。本文聚焦Databricks环境下的生产级实现,深入解析JDBC驱动选型(如mssql-jdbc 12.6.1.jre11)、NULL安全匹配逻辑、READ_COMMITTED_SNAPSHOT隔离优化等硬核细节,并提

weixin_30838873的博客 425

Python-split()函数的使用

用途: 可以用于把narray分成几份。 axis:0,1分别表示按行、列维度拆分(取平均) 示例: numpy.plit(ary, indices_or_sections, axis=0) import numpy as np b= np.arange(48).reshape(6,2*4) print(b) print(np.split(b,1,axis=1)) print(np....

dream6104的专栏 519

pyspark基础操作

最近在公司经常会用到一些spark,一般都是使用python进行处理,一开始使用还是有点陌生,看了几篇往上的文章也简单的操作了几天,通过写这篇文章再去巩固一下基础知识~持续更新 提示(tips) 这里要说一下spark中每一个环节都是分开的; spark函数使用的是驼峰命名法; 代码写在一行上,如果过长换行必须有"",否则会报错(此坑已踩!!); 基础查询 select where ->> where/filter group by ->> groupby case when 函

小猪课堂的博客 1280

Colab中用PySpark高效读取Kaggle大文件的实战指南

PySpark是一种面向大规模数据处理的分布式计算框架,其核心优势在于内存外(out-of-core)执行、惰性求值和JVM级内存管理,特别适合突破单机内存瓶颈。在资源受限但开箱即用的Google Colab环境中,PySpark可替代pandas处理远超RAM容量的Kaggle数据集(如5–10GB CSV/Parquet),通过合理配置spark.sql.files.maxPartitionBytes与spark.sql.adaptive.enabled等关键参数,实现稳定、可复现、低内存占用的数据加载

452

【技术文档】PySpark学习笔记~ 持续更新

PySpark实战第一章:了解Spark1.1 什么是Apache Spark1.2 Spark作业和API1.3 Spark2.0的结构1.4 小结第二章:弹性分布式数据集2.1 RDD的内部运行方式 第一章:了解Spark 快速易用的处理复杂数据的矿机 1.1 什么是Apache Spark 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码

JackCrum的博客 1173

Maxwell个人初学经验及资料分享

前段时间学习了课题组基于Maxwell所建立的模型,因为以前从来没有使用过,只是按照一步一步记忆了操作,但总觉得不熟悉,我想是缺乏对这个软件整体的了解,真正想上手只会这一个模型也没有办法扩展。但是我感觉这些有限元分析软件学习起来应该有一些共性,基于以前对COMSOL学习的一点经验,我就在官网和其他网站找了一些学习资源构成一条基础入门之路,也可能有更好的资源,仅代表个人观点做一下分享。以上就是本人对该软件初步学习的一点理解,跟着这样的操作不到一个星期就能初步的掌握。...

怎么又是萝卜的博客 5631

【项目总结】NewStart——PySpark学习笔记

大功告成

梦想破三的奔三狗 1万+

Mac微信聊天记录备份终极指南:用软链接轻松迁移到外接硬盘(附重签名教程)

本文详细介绍了如何通过软链接技术将Mac微信聊天记录备份迁移到外接硬盘,解决内置存储空间不足的问题。教程包括备份文件定位、软链接创建及微信重签名步骤,帮助用户高效管理微信数据,释放Mac存储空间。

uuu88的博客 1164

CubeMX实战:ETH+LWIP+FreeRTOS网络工程从零搭建与AC6编译优化

本文手把手教你使用STM32CubeMX从零搭建集成以太网(ETH)、LWIP协议栈和FreeRTOS的嵌入式网络工程。文章详细解析了外设配置、协议栈调优、任务规划等关键步骤,并重点分享了如何解决ARM Compiler 6(AC6)的兼容性问题,实现编译速度与稳定性的双重提升,助你快速构建稳定的网络应用原型。

n2o3p4的博客 409

聚合函数用不好?PySpark性能差十倍,你必须知道的3个陷阱

掌握PySpark的DataFrame聚合函数优化技巧,避免性能下降十倍。详解常见陷阱及适用场景,分享分区、缓存与谓词下推三大核心方法,提升大数据处理效率。值得收藏

AlgoChat的博客 1041

GPU八卡A100使用INT4-W4A16量化大模型实验

本实验旨在探索在环境下,对大语言模型进行权重量化的可行性、效率与性能影响。通过采用工具集成 GPTQ 算法,实现对所有线性层的权重量化(W4A16 方案最终通过lm-eval工具在GSM8K任务上对压缩模型进行评估。

goodgood_UP的博客 1908

pyspark读写数据等(数据处理妙招)(持续更新中……)

1、读取数据,之后再把数据写入csv文件中 from pyspark.sql import SQLContext from pyspark import SparkContext sc = SparkContext() # 只能运行一次 sqlContext = SQLContext(sc) # 读取数据 raw_data = sqlContext.read.format('com...

xiaotian127的博客 1887

Matlab实战:如何用MMG方程预测船舶轨迹(附完整代码)

本文提供了一份基于MMG方程的Matlab实战指南,详细讲解了如何从零构建船舶轨迹预测模型。内容涵盖MMG模型的核心原理、Matlab代码框架设计、动力学函数实现、参数调优与验证方法,并附有完整代码示例,帮助工程师和研究者快速掌握这一船舶操纵性预测的关键技术。

v6b7n8m9q0的博客 518

从 ABAP 后端到 AEX,Local Integration Engine 下的 Business System 配置全景

本文围绕SAP PI AEX配置中ABAP后端系统与AEX的连接问题,梳理了关键概念和技术脉络。重点指出基于ABAP 6.20及更高版本的业务系统内置了本地集成引擎(Local Integration Engine),负责与AEX的消息交互。配置要点包括:1)在SM59中创建HTTP类型RFC目标连接AEX;2)配置SAP_PROXY_ESR供设计时代理生成;3)通过SXMB_ADM设置业务系统角色为应用系统;4)确保SLD注册和SICF服务激活。文章特别强调运行时代理消息传递与设计时代理生成的区分,以及H

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 97

PySpark 概述

PySpark 是 Apache Spark 的 Python API。它使您能够使用Python在分布式环境中执行实时、大规模的数据处理。它还提供了一个 PySpark shell,用于交互式分析您的数据。

zy345293721的博客 1010

扩充两个三维体积:ITK实现

在医学图像处理中,经常需要进行 3D 体积的操作,比如合并、分割等。而 ITK (Insight Segmentation and Registration Toolkit) 是一个常用的开源库,可以用于实现各种医学图像处理算法。这篇文章将介绍如何使用 ITK 实现扩充两个三维体积的操作。不过以上代码已经足够简单明了地演示了如何使用 ITK 实现扩充两个三维体积的操作。首先,我们需要准备两个三维体积的数据。这里假设这两个体积大小相同,并且已经加载到内存中了。来读取和保存体积数据,使用了。

CodeVorter的博客 204

书籍:掌握Python的网络和安全 PySpark SQL Recipes_ With HiveQL, Dataframe and ...

简介 PySpark SQL Recipes:使用HiveQL,Dataframe和Graphframes Pdf 使用问题解决方案方法,使用PySpark SQL,图形框架和图形数据处理进行数据分析。本书提供了与数据框架,数据操作摘要和探索性分析相关的问题的解决方案。您将使用图形框架提高图形数据分析的技能,并了解如何优化PySpark SQL代码。 ...

weixin_33832340的博客 173

告别传统RAG的痛点!Agent Skills让知识库检索更智能(本地知识库搭建新思路:用Agent Skills实现渐进式检索)

传统RAG在知识库检索中存在文档结构丢失、Token消耗大等问题 📚 Agent Skills通过分层索引、渐进式检索等设计,实现了更智能的本地知识库检索方案 🤖 本文详细介绍了Agent Skills的核心设计理念、与传统RAG的对比以及实践建议,帮助你搭建高效的知识库系统 ✅

XiaoqiangClub的博客 693

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

PySpark(一)Spark原理介绍、PySpark初体验及原理

Apache Spark是用于处理的统一(unified)分析引擎,其特点就是对任意类型的数据进行自定义计算。

qq_54517101的博客 1981

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

PySpark数据分析基础:PySpark基础功能及DataFrame操作基础语法详解_pyspark rdd(1)

Spark框架深度理解一:开发缘由及优缺点Spark框架深度理解二:生态圈Spark框架深度理解三:运行架构、核心数据集RDDPySpark只是通过JVM转换使得Python代码能够在Spark集群上识别运行。故Spark的绝大多数功能都可以被Python程序使用。一文速学-PySpark数据分析基础:PySpark原理详解已经把PySpark运行原理讲的很清楚了,现在我们需要了解PySpark语法基础来逐渐编写PySpark程序实现分布式数据计算。

2401_84182020的博客 1374

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pyspark.ml.feature模块详解(持续更新中)

Tokenizer(inputCol=None,outputCol=None) 分词器,把字符串转为小写,并以空格分词 eg: df=spark.createDataFrame([('''Machine learning can be applied to a wide variety of data types, such as vectors, text, images, an...

花木兰 3012

探索大数据的无限可能:PySpark 实战指南 —— pyspark-examples 项目深度剖析

探索大数据的无限可能:PySpark 实战指南 —— pyspark-examples 项目深度剖析 项目介绍 在大数据处理的星辰大海中,Apache Spark 无疑是那颗璀璨的明星,它以其强大的分布式计算能力,简化了复杂的数据处理流程。而pyspark-examples项目,则是您探索这片星空的最佳向导。该项目致力于提供一系列基于Python的Apache Spark代码示例,旨在帮助开发者快...

gitblog_01170的博客 923

【Spark】Spark常见错误问题汇总(~持续更新)

一、SparkSQL相关 1.在执行insert 语句时报错,堆栈信息为:FileSystem closed。常常出现在ThriftServer里面。 原因:由于hadoop FileSystem.get 获得的FileSystem会从缓存加载,如果多线程一个线程closedFileSystem会导致该BUG 解决:hdfs存在不从缓存加载的解决方式,在hdfs-site.xml 配置 fs.hdfs.impl.disable.cache=true即可 2.在执行Spark过程中抛出:Failed t

Sunny的专栏 7965

hive python spark_Trivagoj为何从Hive/SQL迁移到PySpark/Python?

Trivago是一个以拍卖为基础的市场。广告商可以通过拍卖购买指定酒店的查询结果页面中的重要位置,trivago的拍卖机制将几个因素:价格、点击率和出价本身,以确定拍卖获胜者。当您访问trivago的页面并搜索位置或关键字时,会运行实时拍卖机制来确定获胜的广告客户,即哪个广告客户成为“查看交易”按钮上的广告客户。在trivago 或任何其他以拍卖为基础的市场上竞争需要高水平的专业知识和专门的数据...

weixin_39949297的博客 224
上一篇: MAC系统 LightGBM模型转为pmml格式
下一篇: Hive sql中条件写在on和where的区别
烟雨人长安
博客等级 码龄10年 871粉丝 53原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值