首页 > 其他分享 >spark的SparkContext,SparkConf和SparkSession及dataframe和RDD的区别

spark的SparkContext,SparkConf和SparkSession及dataframe和RDD的区别

时间:2024-05-16 18:56:46浏览次数:10  
标签:SparkContext SparkSession dataframe RDD master DataFrame SparkConf

spark的SparkContext,SparkConf和SparkSession及dataframe和RDD的区别

SparkContext 和 SparkConf

任何Spark程序都是SparkContext开始的,SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数。
初始化后,就可以使用SparkContext对象所包含的各种方法来创建和操作RDD和共享变量。

al conf = new SparkConf().setMaster("master").setAppName("appName")
val sc = new SparkContext(conf)
或者
val sc = new SparkContext("master","appName")

Note:

Once a SparkConf object is passed to Spark, it is cloned and can no longer be modified by the user.
  也就是说一旦设置完成SparkConf,就不可被使用者修改

对于单元测试,您也可以调用SparkConf(false)来跳过加载外部设置,并获得相同的配置,无论系统属性如何。

咱们再看看setMaster()和setAppName()源码:

据上面的解释,setMaster主要是连接主节点,如果参数是"local",则在本地用单线程运行spark,如果是 local[4],则在本地用4核运行,如果设置为spark://master:7077,就是作为单节点运行,而setAppName就是在web端显示应用名而已,它们说到底都调用了set()函数,让我们看看set()是何方神圣

SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。SparkSession内部封装了sparkContext,所以计算实际上是由sparkContext完成的

val sparkSession = SparkSession.builder
                    .master("master")
                    .appName("appName")
                    .getOrCreate()
或者
SparkSession.builder.config(conf=SparkConf())

上面代码类似于创建一个SparkContext,master设置为"xiaojukeji",然后创建了一个SQLContext封装它。如果你想创建hiveContext,可以使用下面的方法来创建SparkSession,以使得它支持Hive(HiveContext):

val sparkSession = SparkSession.builder
                    .master("master")
                    .appName("appName")
                    .enableHiveSupport()
                    .getOrCreate()
//sparkSession 从csv读取数据:
 
val dq = sparkSession.read.option("header", "true").csv("src/main/resources/scala.csv")

getOrCreate():有就拿过来,没有就创建,类似于单例模式:

s1 = SparkSession().builder.config("k1", "v1").getORCreat()
s2 = SparkSession().builder.config("k2", "v2").getORCreat()
return s1.conf.get("k1") == s2.conf.get("k2")

True

dataframe和RDD的区别

数据结构和操作方式:

DataFrame是基于列的数据结构,类似于关系型数据库中的表格,每列都有自己的名称和数据类型,支持SQL查询、结构化数据处理和机器学习等高级操作。
RDD(弹性分布式数据集)是基于分布式内存的数据结构,是一个不可变的分布式数据集合,可以进行类似MapReduce的操作,如映射、过滤、聚合等。
用途和优化:

DataFrame提供了比RDD更丰富的算子操作,并且利用已知的结构信息来提升执行效率、减少数据读取以及执行计划的优化,如filter下推、裁剪等。
RDD的操作是基于函数式编程的,主要包括转换操作和行动操作,但需要手动编写代码来进行数据处理和转换。
结构和设计目的:

RDD是Spark平台对数据的一种存储、计算以及任务调度的逻辑基础,具有通用性,适用于各类数据源。
DataFrame是针对结构化数据源的高层数据抽象,在创建过程中必须指定数据集的结构信息(Schema),具有专用性。
使用场景:

DataFrame适合处理结构化数据,并提供了丰富的API和优化来提高数据处理和分析的效率。
RDD更适合处理非结构化数据和复杂的计算任务,因为它提供了低级别的API和灵活性来处理各种类型的数据。
综上所述,DataFrame和RDD在Spark中扮演着不同的角色,DataFrame更适合处理结构化数据并提供高级操作和优化,而RDD则提供了更灵活的底层操作来处理非结构化数据。

标签:SparkContext,SparkSession,dataframe,RDD,master,DataFrame,SparkConf
From: https://www.cnblogs.com/atao-BigData/p/18196541

相关文章

  • DataFrame按条件筛选、修改数据:df.loc[]拓展
    DataFrame按条件筛选、修改数据:df.loc[]拓展创建一个DataFrame先通过字典创建一个学生信息的DataFrame。importpandasaspdStudent_dict={'姓名':['张三','李四','王五','赵六'],'性别':['男','女',......
  • 使用Python的DataFrame和duckdb查询PG数据库
    直接使用以下脚本:importpsycopg2importduckdbimportpandasaspd#ConnecttoPostgreSQLconn_postgres=psycopg2.connect(dbname="pg_test_db",user="your_username",#Replacewithyourusernamepassword="your_password&qu......
  • dataframe的构造,取值,赋值,移动,交集,并集,排序,打印,转List,导出csv
    一、构造  da=pd.read_csv(filepath_or_buffer='data.csv',sep='\t')  print(da)  datas=pd.DataFrame(da)2、直接赋值df=pd.DataFrame([[1.4,np.nan],[7,-4],[np.nan,np.nan],[0.75,-1.3]],index=[1,2,3,4],         columns=[......
  • DataFrame删除复合索引
    index2和reasons_id数据显示重复,可以删除列'reasons_id',如果强迫症必须删除索引,可以用下面的方法#reasons_idtotal_price...total_price_统计people_num_统计#index1index2.........
  • pd.merge函数合并DataFrame 保留原index
    C=pd.merge(A,B),merge之后C的行数并不会变。但是A的index丢失了,因为merge之后index是重排的。解决办法:方法1:#可以先把A的index保存一下,A、B中含有"col"列A_index=A.indexC=pd.merge(A,B,on="col",how="left")C.index=A_index方法2:#A、B中含有"col"列,set_index设置C......
  • 处理DataFrame的技巧
    DataFrame:user_idnameagecountryscorecontinent1001Mark55Italy4.5Europe1000John33USA6.7America1002Tim41USA3.9America1003Jenny12Germany9Europe如果在构造DataFrame时没有提供列名,那么pandas会用从0开始的数字为列编号。us......
  • [985] Filter by Column Value & Multiple Conditions in Pandas dataframe
    ref:WaystofilterPandasDataFramebycolumnvaluesFilterbyColumnValue:Toselectrowsbasedonaspecificcolumnvalue,usetheindexchainmethod.Forexample,tofilterrowswheresalesareover300:Pythongreater_than=df[df['Sales&#......
  • Pandas Dataframe合并连接Join和merge 参数讲解
    文章目录函数与参数分析otheronhowlsuffix,rsuffix,suffixesleft_index,right_index函数与参数分析在pandas中主要有两个函数可以完成table之间的joinJoin的函数如下:DataFrame.join(other,on=None,how=‘left’,lsuffix=‘’,rsuffix=‘’,sort=False,va......
  • DataFrame.loc和DataFrame.iloc
    DataFrame.loc(行索引名称或者条件,列索引名称或者条件)DataFrame.iloc(行索引位置,列索引位置)注意事项:1.如果选取的是范围的话,用冒号且不加中括号,比如说iloc[0:3,0:3],表示选取1-3行和1-3列。2.如果选取的是第几行,第几列时,用逗号且加中括号,比如说loc[[1,3],['name','age']],......
  • pandas DataFrame内存优化技巧:让数据处理更高效
    Pandas无疑是我们数据分析时一个不可或缺的工具,它以其强大的数据处理能力、灵活的数据结构以及易于上手的API赢得了广大数据分析师和机器学习工程师的喜爱。然而,随着数据量的不断增长,如何高效、合理地管理内存,确保PandasDataFrame在运行时不会因内存不足而崩溃,成为我们每一个人......