大数据分析学习第十课 通过.NET for Apache Spark实现wordcount

13 篇文章 0 订阅

由于我做了很多年.net开发,所以对.net技术还算相对熟练和了解,今天我们就在windows环境下实现spark环境部署,以及简单的wordcount示例

第一步 环境准备

我们要在.net下运行程序,肯定要先安装.net,现在都讲究跨平台开发,所以我们采用.net下的跨平台 .NET Core SDK,下面是下载链接

https://dotnet.microsoft.com/download/dotnet/3.1

我们采用3.1版本,

安装 .NET Core SDK 后,我们打开一个新的cmd命令提示符,然后运行 dotnet

如果该命令运行并打印出有关如何使用 dotnet 的信息,说明安装成功了

第二步 安装 Java

java安装比较简单,我们下载jdk解压后,配置一下JAVA_HOME环境变量就可以了,这里就不介绍了

第三步 安装 Apache Spark

下载并安装 Apache Spark,我们从下面链接下载,这里我们选择 spark-3.0.2-bin-hadoop2.7.tgz,因为我使用最新的3.1.1发现版本不兼容

https://github.com/dotnet/spark/releases

下载之后我们解压

解压之后,我们在cmd执行以下语句,创建环境变量,当然也可以手动配置,语句里面的路径请自行配置为自己电脑的实际路径

setx /M HADOOP_HOME C:\bin\spark-3.1.1-bin-hadoop2.7\
setx /M SPARK_HOME C:\bin\spark-3.1.1-bin-hadoop2.7\
setx /M PATH "%PATH%;%HADOOP_HOME%;%SPARK_HOME%\bin"   # Warning: Don't run this if your path is already long as it will truncate your path to 1024 characters and potentially remove entries!

这里我们注意第三行,如果有Warning,我们就去手动配置下PATH,主要是路径过长被截断字符了

设置环境变量后,我们一定要打开新的命令提示符运行以下命令,检查配置是否正常

spark-submit --version

我们在下图可以看到spark 版本,scala版本以及java版本都打印出来了

第四步 安装 .NET for Apache Spark

我们需要下载 Microsoft.Spark.Worker,这里我们选择.NET for Apache Spark v1.1.1版本,下载链接如下

https://github.com/dotnet/spark/releases

下载后一样解压到前面spark的位置

第五步 安装 WinUtils(仅限 Windows)

.NET for Apache Spark 要求与 Apache Spark 一起安装 WinUtils,我们从下面链接下载winutils.exe。 然后,将 WinUtils 复制到 C:\bin\spark-3.0.2-bin-hadoop2.7\bin这个目录下

https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe

第六步 设置 DOTNET_WORKER_DIR 并检查依赖项

我们在cmd执行下面命令 指定我们前面下载解压的Microsoft.Spark.Worker

setx /M DOTNET_WORKER_DIR C:\bin\Microsoft.Spark.Worker-1.1.1

第七步 wordcount程序实现

我们今天的重头戏来了,首先我们要创建一个.net core项目,我们可以使用vs2019,也可以使用命令创建,命令格式如下

dotnet new console -o MySparkApp

cd MySparkApp

我们进到新建的项目MySparkApp的文件夹里面,执行下面命令,添加项目需要的spark依赖包

dotnet add package Microsoft.Spark

经过上面的步骤,我们的wordcount项目已经创建好了,我现在使用vs2019打开这个项目,见下图,从图中我们可以看到左边是一个hello world示例代码,右侧是项目文件,其中可以看到项目的spark依赖包,其实我们只用到3-0_2-1.1.1.jar第三个包

接下来,我们删除hello world程序,输入以下代码

using Microsoft.Spark.Sql;
using static Microsoft.Spark.Sql.Functions;

namespace MySparkApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create Spark session
            SparkSession spark =
                SparkSession
                    .Builder()
                    .AppName("word_count_sample")
                    .GetOrCreate();

            // Create initial DataFrame
            string filePath = args[0];
            DataFrame dataFrame = spark.Read().Text(filePath);

            //Count words
            DataFrame words =
                dataFrame
                    .Select(Split(Col("value"), " ").Alias("words"))
                    .Select(Explode(Col("words")).Alias("word"))
                    .GroupBy("word")
                    .Count()
                    .OrderBy(Col("count").Desc());

            // Display results
            words.Show();

            // Stop Spark session
            spark.Stop();
        }
    }
}

代码输完后,我们生成一下项目,就是右键项目名称MySparkApp,点击生成,之后我们会在项目里创建debug目录,编译后的文件在MySparkApp\bin\Debug\net5.0里面

从上面的代码可以看到主程序是需要传入一个文件路径参数的,这里我准备了一个输入文件input.txt,内容是

Hello World

This .NET app uses .NET for Apache Spark

This .NET app counts words with Apache Spark

我们在该目录运行cmd命令,然后输入运行命令,注意我们要把input.txt放到MySparkApp\bin\Debug\net5.0同目录里,这样就不用输入物理路径了

spark-submit --class org.apache.spark.deploy.dotnet.DotnetRunner --master local microsoft-spark-3-0_2.12-1.1.1.jar dotnet MySparkApp.dll input.txt

执行后等待任务执行,最终我们会看到打印分析结果,下面第二图

今天的课程就到这里了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫头鹰数据分析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值