How to Install Apache Spark on Windows Setup PySpark
为什么要在Windows 10上运行Scala Spark程序⌗
开发环境设置简单:⌗
对于许多开发者来说,Windows是他们最熟悉的操作系统, 因此在Windows上进行开发可以节省大量的环境设置和配置时间。 此外,Windows上有IntelliJ IDEA可以方便Scala和Spark的开发。
本地测试方便:⌗
在本地Windows环境中进行开发, 可以方便快速的进行代码的单元测试和调试。 虽然Spark在集群中运行时的行为可能与在单个机器上有所不同, 但对于许多常见的任务, 本地测试通常可以提供足够的保证。
如何做⌗
步骤1,下载spark并安装⌗
根据自己的环境版本,在官网下载spark-3.2.4-bin-hadoop2.7包
下载链接地址为https://spark.apache.org/downloads.html
解压.tgz文件放到你本地目录夹,如d:\spark-2.4.4-bin-hadoop2.7
步骤2 下载winutils并安装⌗
下载winutils.exe(解释windows hadoop通信问题)
下载链接地址https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe
存放到d:\spark-2.4.4-bin-hadoop2.7\bin\winutils.exe 该目录下
步骤3,设置环境变量⌗
设置windows环境变量
# Environment variable: 
SPARK_HOME=d:\spark-2.4.4-bin-hadoop2.7
HADOOP_HOME=d:\spark-2.4.4-bin-hadoop2.7
# PATH variable:
 d:\spark-2.4.4-bin-hadoop2.7\bin
步骤4 验证测试scala spark 、 pyspark⌗
测试 pyspark
import sys
# 这里不需要用pip install pyspark 会容易报错,根本不好安装的,不好使还不如这样引用
sys.path.append("D:\spark-3.2.4-bin-hadoop2.7\python")
from pyspark.sql import SparkSession
# 创建 SparkSession
spark = SparkSession.builder
    .appName("HDFS Read Example")
    .config("spark.master", "local")
    .getOrCreate()
# 读取 CSV 文件
df = spark.read.csv("hdfs://sybigdata/user/example/part-00000-d3d3436e-f258-43b8-bfec-e45eb966edc7-c000.csv", header=True)
# 显示前 10 行
df.show(10)
查看显示结果
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
23/05/11 15:19:23 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
+------+--------+--------------+--------------+-----------+----------+
|vvbbcc|hhmm_int|abc_name_index|abc_page_index|bbbbb_index|dddd_index|
+------+--------+--------------+--------------+-----------+----------+
|    31|     943|           2.0|           2.0|        0.0|       0.0|
|    18|     395|           6.0|           6.0|        0.0|      31.0|
|     9|    1175|           2.0|           2.0|        0.0|      20.0|
|    15|    1250|           5.0|           5.0|        0.0|      34.0|
|    16|     266|           7.0|           7.0|        0.0|       1.0|
|     6|     131|           5.0|           5.0|        0.0|       8.0|
|     8|     136|           4.0|           3.0|        0.0|       0.0|
|     7|    1229|           1.0|           1.0|        0.0|       5.0|
|    10|      79|           4.0|           3.0|        0.0|       4.0|
|    19|    1156|           6.0|           6.0|        0.0|       3.0|
+------+--------+--------------+--------------+-----------+----------+
only showing top 10 rows
验证scala spark⌗
读取csv文件
    val spark = SparkSession.builder()
      .appName("ShowLocal")
      .config("spark.master", "local")
      .enableHiveSupport()
      .getOrCreate()
    val path = "hdfs://sybigdata/user/example/part-00000-d3d3436e-f258-43b8-bfec-e45eb966edc7-c000.csv"
    // 从HDFS中读取所有CSV文件
    val df = spark.read.format("csv").option("header", "true").load(path)
    // 打印数据
    df.show(10)
请注意,要以windows 跑成功spark程序,以下配置是必须的 windows 作为单机跑起来,在本地运行
## 在windows 本地以下为 本地运行spark, 以下代码是必须的
    System.setProperty("hadoop.home.dir", "C:\\winutils\\")
    val spark = SparkSession.builder()
      .appName("helloSpsark")
      .config("spark.master", "local")
      .enableHiveSupport()
      .getOrCreate()
写入csv文件
    System.setProperty("hadoop.home.dir", "C:\\winutils\\")
    val user = "admin"
    val ugi = UserGroupInformation.createRemoteUser(user)
    ugi.doAs(new PrivilegedExceptionAction[Unit]() {
      override def run: Unit = {
        val spark = SparkSession.builder()
          .appName("helloSpsark")
          .config("spark.master", "local")
          .enableHiveSupport()
          .getOrCreate()
        val tuples = Seq((1, "spark"), (2, "Big Data"))
        val df = spark.createDataFrame(tuples).toDF()
        df.show()
        #这里会把csv文件保存在e:\abcd目录下
        df.write.mode(SaveMode.Overwrite).format("csv").save("file:///e:/abcd")
        spark.stop()
      }
    })
以下是保存的csv文件目录
E:\abcd>dir 
2023/05/11  14:59    <DIR>          .
2023/05/11  14:59    <DIR>          ..
2023/05/11  14:59                12 .part-00000-8430568a-02c2-4db8-ad6c-16a2aed410df-c000.csv.crc
2023/05/11  14:59                 8 ._SUCCESS.crc
2023/05/11  14:59                21 part-00000-8430568a-02c2-4db8-ad6c-16a2aed410df-c000.csv
2023/05/11  14:59                 0 _SUCCESS
               4 个文件             41 字节
               2 个目录 211,274,485,760 可用字节
csv 文件内容
E:\abcd>type part-00000-8430568a-02c2-4db8-ad6c-16a2aed410df-c000.csv
1,spark
2,Big Data
在windows10 用intellj idea 创建spark程序步骤⌗
使用 “net.alchim31.maven:scala-archetype-simple”。这个 archetype 为您提供了一个基本的 Scala 项目结构,您可以在此基础上添加 Spark 依赖。
按照以下步骤在 IntelliJ IDEA 中创建一个基于 Scala + Spark 的 Maven 项目:
打开 IntelliJ IDEA,点击 “Create New Project”。
在左侧导航栏中选择 “Maven”,然后勾选 “Create from archetype”。
如果 “net.alchim31.maven:scala-archetype-simple” 不在列表中,点击 “Add Archetype” 按钮。
在 “Add Archetype” 对话框中输入以下信息:
GroupId: net.alchim31.maven
ArtifactId: scala-archetype-simple
Version: 1.7(或您想使用的其他版本)
点击 “OK”。
在列表中选择 “net.alchim31.maven:scala-archetype-simple”,然后点击 “Next”。
输入 “GroupId” 和 “ArtifactId”(例如,com.example 和 voicepredictionmodel)。点击 “Next”。
选择项目的存储位置,然后点击 “Finish”。
现在,您已经创建了一个基于 Scala 的 Maven 项目。接下来,需要为项目添加 Spark 依赖。
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.12</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.12</artifactId>
    <version>3.2.0</version>
</dependency>