SparkSQL使用

本文主要介绍了Spark SQL的默认配置,包括Spark_HOME的设置和提交脚本参数。接着详细讲解了Spark SQL的操作,如初始操作、数据展示、选择行/列、数据聚合和连接。最后探讨了Spark中的数据存储相关知识。

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

一、默认配置

Spark_HOME:进入目录/soft/client/spark-2.1.1-bin-2.6.0/conf文件夹,文件如下:

spark-defaults.conf    //设置spark maeter地址、每个executor进程的内存、占用核数等
spark-env.sh    //spark相关的各种环境变量
log4j.properties.template    //设置driver向console输出的日志的等级及格式
fairscheduler.xml.template    //设置调度方式
metrics.properties.template    //设置spark内部metrics系统,一般无需改动
slaves    //设置spark集群中的slave节点(worker),无需改动
hadoop-default.xml    //hadoop配置,主要是hdfs配置
hadoop-site.xml    //hadoop集群的访问配置

常见默认配置

# ApplicationMaster
spark.yarn.am.memory=8g
spark.yarn.am.cores=5
#spark.yarn.am.memoryOverhead=AM memory * 0.10, with minimum of 384
#spark.yarn.am.extraJavaOptions

# Driver
spark.driver.cores=2
spark.driver.memory=4g
spark.driver.maxResultSize=1g
#spark.yarn.driver.memoryOverhead=driverMemory * 0.10, with minimum of 384

# Executor
spark.executor.cores=4
spark.executor.memory=8g
spark.executor.instances=1
spark.executor.heartbeatInterval=20s
#spark.yarn.executor.memoryOverhead=executorMemory * 0.10, with minimum of 384
#spark.executor.extraJavaOptions=-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"

spark提交脚本:

spark-submit example.py
#脚本需要建立Session
from pyspark.sql import SparkSession
spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.some.config.option","some-value") \
    .enableHiveSupport() \
    .getOrCreate()
#spark连接的物理上的数据库
spark.catalog.listDatabases()
#返回Spark运行时的资源
spark.conf.get("spark.sql.shuffle.partitions")
spark.conf.get("spark.executor.memory")
spark.conf.get("spark.executor.cores")
#get换为set可进行修改

spark提交脚本参数

二、Spark SQL操作

初始操作及数据展示

 from pyspark.sql.functions import *   #引入包
 data = spark.sql("select col1 from cf_tmp.data where dt=sysdate(-1)")#读入数据
 data.col1.alias('第一列')  #别名
 data.cache()   #将数据加入缓存

 data.printSchema()   #显示表结构,相当于desc
 data.columns   #只显示表列名
 data.count()   #显示数据行数
 data.show(5)   #展示5行数据
 data.first()
 data.head(10)
 data.describe().show()   #描述统计:个数、均值、标准差、最大值、最小值
 data.approxQuantile('col',[0.5],0.01)   #取分位数
 data.limit(5).collect()   #全部数据输出,可用limit限制行数

数据表操作:选择行/列

#数据行筛选
temp1 = data.filter("col1>100")
temp1 = data.where("col1>100")
temp1 = data.where(data["col1"]>100)
temp1 = data.where(data.col1>100)

temp2 = data.select('col1', 'col2')   #选取数据列
temp2 = data.drop('col1', 'col2')   #删除指定列返回其他数据
temp2 = data.withColumnRenamed('col1','column1')   #修改列名
temp2 = data.withColumn('col3',temp2.col1==0)   #增加列

#抽样
sample = data.limit(100)
sample = data.sample(False, 0.1, 5)   #是否可放回、抽样比例、种子
frac = dict([(True,0.1),(False,0.2)])   #定义分层抽样比例
sample = data.sampleBy("col1", fractions=s_frac, seed=0)   #分层抽样

Spark只有在需要输出结果的时候才会进行运算,并自带并行处理。

常用函数操作:

data.distinct()   #删除每列完全相同的行
data.dropDuplicates()   #单列删除重复值
data.na.drop()   #删除有缺失值的行
data.na.fill(0)   #填充缺失值为0
data.na.fill({'col1':0.01,'col2':0.0})   #以字典的形式填充多列

data.crosstab('col1','col2').show()   #列联分析,统计个数

data.groupBy('col1').count()   #聚合计数
#avg() min() max() sum()  agg()自定义聚合函数

数据聚合/连接

data.sort("col", ascending=False)   #降序排列
tmp = data.subtract(data2)   #取差集
tmp = data.union(data2)   #数据合并,不去重
tmp = data.intersect(data2)   #取交集

data12 = data1.join(data2,"col1",'inner')
data12 = data1.join(data2,data1.col1==data2.col2,'left')

三、数据存储

#csv:转化为pandas再输出
data.toPandas().to_csv('/exportfs/home/mycsv.csv')
#写入数据库
df_writer = pyspark.sql.DataFrameWriter(data)
df_writer.format('orc').mode('overwrite').saveAsTable('cf_tmp.temp')
#读写json数据
df_writer = pyspark.sql.DataFrameWriter(temp.select(temp.col))
df_writer.format('json').mode('overwrite').save('$HOME/temp.json')#写
df2 = spark.read.format('json').load('$HOME/temp.json')#读1
df2 = spark.read.json('$HOME/temp.json')#读2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值