为什么要在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>