pyspark 处理字符串函数

pyspark 要处理数据,没有,那就伪造数据 faker 真是个好东西

复制代码
from faker import Faker
import pandas as pd
gender = ["None","Man","Woman"]

fake = Faker()
names = [(fake.first_name(),fake.last_name(),fake.date_of_birth(),fake.random_int(1,99),gender[fake.random_int(1,2)]) for _ in range(1000)]

pd.DataFrame(names, columns=["first_name","last_name","birthday","age","gender"]).to_csv("fake_names.csv", index=False)

from pyspark.sql import SparkSession
#字符串处理函数
spark = SparkSession.builder.appName('example').getOrCreate()
df =spark.read.csv("fake_names.csv",header=True,inferSchema=True)
# df.show(3)
1、拼接字符串 concat() concat_ws() format_string()
复制代码
from pyspark.sql.functions import concat,concat_ws,format_string
 df.select("first_name","last_name","age",
          concat(df["first_name"],df['last_name']).alias("concat_result"),
          concat_ws('#',df["first_name"],df['last_name']).alias("concat_ws_result"),
         format_string("姓%s名%s年龄%d",df["first_name"],df['last_name'],df['age']).alias("format_string_result")
          ).show(5)
2、字符串的长度和转换大小写 length() lower() upper()
复制代码
from pyspark.sql.functions import length,lower,upper

 df.select(
     "first_name",
     length(df["first_name"]).alias("length_result"),
     lower(df["first_name"]).alias("lower_result"),
     upper(df["first_name"]).alias("upper_result")
).show(5)
3、添加常量值到新的列中
复制代码
from pyspark.sql.functions import lit

df.withColumn("身份",lit('正式员工')).show(3)
df.withColumn("补贴金额",lit('300')).show(3)

df.printSchema()
 df.withColumn("身份",lit('正式员工')).withColumn("补贴金额",lit('300')).printSchema()
4、去除空格
复制代码
from pyspark.sql.functions import trim,ltrim,rtrim,col

df_new = df.withColumn("new_name",concat(lit(" "),df['first_name'],lit(" ")))
 df_new.show()
df_new.select(
    "new_name",
     format_string("#%s#",col("new_name")).alias("source"),
     format_string("#%s#", ltrim(col("new_name"))).alias("ltrim_result"),
     format_string("#%s#", rtrim(col("new_name"))).alias("rtrim_result"),
     format_string("#%s#", trim(col("new_name"))).alias("trim_result")
 ).show(5)
5、正则提取
复制代码
from pyspark.sql.functions import regexp_extract

 df.select(
    'birthday',
    regexp_extract(df['birthday'],r'(\d+)-(\d+)-(\d+)',1).alias('year'),
     regexp_extract(df['birthday'],r'(\d+)-(\d+)-(\d+)',2).alias('month'),
    regexp_extract(df['birthday'],r'(\d+)-(\d+)-(\d+)',3).alias('day')
 ).show(5)
6、正则替换
复制代码
from pyspark.sql.functions import regexp_replace

df_new = df.withColumn("姓名",format_string("姓%s 名%s",df['first_name'],df['last_name']))
df_new.show(5)

df_new.withColumn("清理姓名",regexp_replace(df_new['姓名'],r'姓|名| ','')).show(5)
7、提取字符串的子串
复制代码
from pyspark.sql.functions import substring

df.select(
     'first_name',
    'birthday',
    substring(df['birthday'],0,4).alias('year'),
     substring(df['birthday'],6,2).alias('month'),
    substring(df['birthday'],-2,2).alias('day'),
).show(5)
8、字符串拆分
复制代码
from pyspark.sql.functions import split,size

df_new= df.select(
    'birthday',
    split(df['birthday'],'-').alias('splits'),
)
df_new.show(5)
df_new.printSchema()

df_new.select(
    'birthday',
    'splits',
    df_new['splits'].getItem(0).alias("year"),
    df_new['splits'].getItem(1).alias("month"),
    df_new['splits'].getItem(2).alias("day"),
    size(df_new['splits']).alias('size')
).show(5)
相关推荐
小邓睡不饱耶2 小时前
基于Spark GraphX构建用户信任网络:精准定位高价值目标用户
大数据·spark·php
编程彩机11 小时前
互联网大厂Java面试:从Java SE到大数据场景的技术深度解析
java·大数据·spring boot·面试·spark·java se·互联网大厂
ApacheSeaTunnel16 小时前
Apache SeaTunnel Zeta、Flink、Spark 怎么选?底层原理 + 实战对比一次讲透
大数据·flink·spark·开源·数据集成·seatunnel·数据同步
迎仔21 小时前
06-Spark 进阶指南:架构原理与 Alluxio 加速
大数据·架构·spark
阿里云大数据AI技术1 天前
淘宝闪购基于阿里云 EMR Serverless Spark&Paimon 的湖仓实践:超大规模下的特征生产&多维分析双提效
starrocks·阿里云·spark·paimon
鸿乃江边鸟1 天前
Spark Datafusion Comet 向量化Rust Native--执行Datafusion计划
大数据·rust·spark·native
小邓睡不饱耶1 天前
Spark Streaming实时微博热文分析系统:架构设计与深度实现
大数据·分布式·spark
Zilliz Planet1 天前
<span class=“js_title_inner“>Spark做ETL,与Ray/Daft做特征工程的区别在哪里,如何选型?</span>
大数据·数据仓库·分布式·spark·etl
uesowys1 天前
Apache Spark算法开发指导-Gradient-boosted tree classifier
人工智能·算法·spark
徐先生 @_@|||2 天前
Spark DataFrame常见的Transformation和Actions详解
大数据·分布式·spark