Spark使用经验

在Ubuntu虚拟机中intellij使用Spark,在此记录一下我用到的知识。有不妥,请指出。不定时更新。

1.日志不输出INFO

  首先,在Spark安装目录下conf中找到log4j.prperties文件(蓝框),将里面log4j.rootCategory=INFO, console改为log4j.rootCategory=WARN, console。如果只有红框,可以在命令行里输入sudo cp log4j.properties.template log4j.prperties,生成蓝框文件,再按照之前修改。然后将其复制到项目目录下 src/resources中。

  最后,在项目目录下右键resources,选择Mark Directory as --> text resources root,再运行就不会输出INFO了。

2.Spark中DenseVector

参考:Spark MLlib 之 Vector向量深入浅出

3.矩阵向量

参考:Spark MLlib之使用Breeze操作矩阵向量

4.SparkSession的API

我用到的:

API功能
builder函数 p u b l i c s t a t i c S p a r k S e s s i o n . B u i l d e r b u i l d e r ( ) \color{purple}{public static SparkSession.Builder builder()} publicstaticSparkSession.Builderbuilder():创建 SparkSession.Builder,初始化SparkSession.
time函数 p u b l i c &lt; T &gt; T t i m e ( s c a l a . F u n c t i o n 0 &lt; T &gt; f ) \color{purple}{public &lt;T&gt; T time(scala.Function0&lt;T&gt; f)} public<T>Ttime(scala.Function0<T>f):执行一些代码块并打印输出执行该块所花费的时间。 这仅在Scala中可用,主要用于交互式测试和调试。

参考:
【spark】SparkSession的API
SparkSession详解

5.线性回归

参考:线性回归原理与spark/sklearn实现

<think>嗯,用户让我介绍Spark使用,但首先我需要确定他们的背景和需求。可能他们是大数据领域的初学者,或者有一定经验想进一步了解SparkSpark是一个流行的大数据处理框架,所以用户可能是在处理大量数据时遇到了性能问题,或者想学习如何分布式处理数据。 接下来,我需要考虑Spark的核心概念,比如RDD、DataFrame、Spark SQL、Streaming等。用户可能需要知道基本的使用方法,比如如何初始化SparkContext,如何操作数据。同时,他们可能关心Spark的优势,比如内存计算、速度比Hadoop快等。 还要注意用户可能对编程语言有偏好,Spark支持Scala、Java、Python和R,其中Python的API(PySpark)可能更受欢迎,因为用户群体广泛。所以例子用PySpark可能更合适。 另外,用户可能想知道实际应用场景,比如机器学习、实时处理等,以及如何部署Spark集群,或者与Hadoop生态系统的整合。不过用户的问题比较开放,可能需要先给出一个概述,再分点详细说明。 需要检查是否有常见的误区,比如Spark与Hadoop的区别,或者何时该用Spark而不是其他工具。同时,确保提供的代码示例正确,语法无误,特别是LaTeX格式的数学公式,如果有提到算法的话。不过这个问题可能不太涉及数学公式,但还是要按照系统指令处理格式。 最后,结构要清晰,分点介绍Spark的特点、核心组件、使用步骤、示例和应用场景,帮助用户逐步理解。确保回答准确可靠,引用正确的版本和最佳实践,比如提到Spark 3.0之后的优化,或者DataFrame的优势。</think>以下是关于Apache Spark的详细介绍和使用说明: ### 一、Spark核心特点 $$Spark = 通用型分布式计算框架 + 内存计算优化 + 丰富API生态$$ 1. **处理速度优势** - 比Hadoop MapReduce快$10\text{-}100\times$(内存计算减少磁盘I/O) - DAG执行引擎优化计算流程 2. **多语言支持** - 原生Scala API - 提供Python(PySpark)/Java/R接口 3. **统一技术栈** $$Spark = SQL查询 + 流计算 + 机器学习 + 图计算$$ ### 二、核心组件 1. **Spark Core** - 基础执行引擎 - 实现RDD(弹性分布式数据集)抽象 $$RDD = 不可变分布式对象集合 + 分区控制 + 容错机制$$ 2. **Spark SQL** ```python df = spark.sql("SELECT name, age FROM users WHERE age > 20") ``` 3. **Spark Streaming** - 微批处理架构(时间窗口$Δt$可配置) 4. **MLlib** - 提供$k$-means聚类、随机森林等算法 ### 三、使用步骤示例(PySpark) ```python # 1. 初始化SparkSession from pyspark.sql import SparkSession spark = SparkSession.builder.appName("demo").getOrCreate() # 2. 创建RDD data = [1,2,3,4,5] rdd = spark.sparkContext.parallelize(data) # 3. 执行转换操作 squared = rdd.map(lambda x: x**2) # 平方计算 # 4. 执行行动操作 print(squared.collect()) # 输出[1,4,9,16,25] ``` ### 四、部署模式对比表 | 模式 | 资源管理 | 适用场景 | |------------|----------------|--------------------| | Local | 单机 | 开发测试 | | Standalone | Spark自带集群 | 中小规模部署 | | YARN | Hadoop资源管理 | 企业级混合负载 | | Kubernetes | 容器编排 | 云原生环境 | ### 五、性能优化技巧 1. **内存管理** - 设置`spark.executor.memory`控制堆内存 $$总内存 = 堆内存 + 堆外内存(默认堆内存的10\%)$$ 2. **并行度调节** ```python spark.conf.set("spark.sql.shuffle.partitions", 200) # 调整shuffle分区数 ``` 3. **持久化策略选择** ```python rdd.persist(StorageLevel.MEMORY_AND_DISK) # 内存不足时溢写磁盘 ``` ### 六、典型应用场景 1. **ETL流水线** - 处理TB级日志数据(转换效率$> 1TB/hour$) 2. **实时推荐系统** $$用户特征向量 \cdot 物品矩阵^T = 推荐评分$$ 3. **时序数据分析** - 使用Structured Streaming处理IoT设备数据流 建议从PySpark入手,结合Databricks社区版进行实践(提供免费集群资源)。对于海量数据处理,建议优先使用DataFrame API而非RDD,因其能通过Catalyst优化器自动优化执行计划。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值